Загрузка новой текстуры в уже определенное имя текстуры - PullRequest
0 голосов
/ 02 декабря 2008

У меня есть программа OpenGl, в которой я отображаю изображение с использованием текстур. Я хочу иметь возможность загрузить новое изображение для отображения.

В моей функции Init я вызываю:

Gl.glGenTextures(1, mTextures);

Поскольку одновременно будет отображаться только одно изображение, я использую одно и то же имя текстуры для каждого изображения.

Каждый раз, когда загружается новое изображение, я вызываю следующее:

Gl.glBindTexture(Gl.GL_TEXTURE_2D, mTexture[0]);

Gl.glTexImage2D(Gl.GL_TEXTURE_2D, 0, Gl.GL_LUMINANCE, mTexSizeX, mTexSizeY, 0, Gl.GL_LUMINANCE, Gl.GL_UNSIGNED_SHORT, mTexBuffer);
Gl.glTexParameteri(Gl.GL_TEXTURE_2D, Gl.GL_TEXTURE_MIN_FILTER, Gl.GL_LINEAR);   
Gl.glTexParameteri(Gl.GL_TEXTURE_2D, Gl.GL_TEXTURE_MAG_FILTER, Gl.GL_LINEAR);

Первое изображение будет отображаться как положено. Однако все изображения, загружаемые после первого, отображаются как все черное.

Что я делаю не так?

Ответы [ 4 ]

1 голос
/ 05 ноября 2010

Вы glDisable GL_TEXTURE_2D после рисования? Поставьте glColor4f(1,1,1,1);, вы должны увидеть хотя бы белый прямоугольник, если 2d текстура отключена. Это поможет вам найти здесь проблему.

1 голос
/ 18 октября 2009

Я не думаю, что проблема в коде, который вы показываете. Вам нужно будет предоставить больше информации о том, как вы рисуете с текстурой, а также как выглядят данные текстуры, переданные в glTexImage2D. Вы уверены, что он все еще действителен к тому времени, когда вы звоните glTexImage2D?

0 голосов
/ 05 декабря 2008

Функция, которую вы ищете - "glCopyTexImage2D" или "glCopyTexSubImage2D".

0 голосов
/ 02 декабря 2008

Когда вы отправляете геометрию, используя эти текстуры? Я предполагаю, что это чередуется с загрузкой текстуры, хотя вы этого не показываете. Конечно, если вы собираетесь заменить имя текстуры другими изображениями, вам не нужно использовать имена текстур вообще, не так ли? Вы можете просто сделать вызов glTextImage2D, когда вам нужно установить новую текстуру, а затем использовать ее столько, сколько необходимо, никогда не задействуя glBindTexture().

Очевидная вещь, которую нужно сделать, это, конечно, вставить код проверки ошибок, OpenGL сохраняет код ошибки при сбое операции, и этот код не перезаписывается, пока не будет прочитан приложением. Подробнее см. glGetError () .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...