унаследованный opengl - включение / отключение типов текстур - PullRequest
1 голос
/ 04 октября 2019

Я анализирую следующий устаревший код opengl:

GLboolean textur2d; 
glIsEnabled(texture2d, GL_TEXTURE_2D);

GLboolean rectangleNV; 
glIsEnabled(rectangleNV, GL_TEXTURE_RECTANGLE_NV);

GLboolean texture3d; 
glIsEnabled(texture3d, GL_TEXTURE_3D);

GLboolean cubeMap; 
glIsEnabled(cubeMap,GL_TEXTURE_CUBE_MAP);

glDisable(GL_TEXTURE_RECTANGLE_NV);
glDisable(GL_TEXTURE_3D);
glDisable(GL_TEXTURE_CUBE_MAP);

glEnable(GL_TEXTURE_2D);
///some drawing

if(!texture2d)
    glDisable(GL_TEXTURE_2D);
if(rectangleNV)
    glEnable(GL_TEXTURE_RECTANGLE_NV);
if(texture3d)
    glEnable(GL_TEXTURE_3D);
if(cubeMap)
    glEnable(GL_TEXTURE_CUBE_MAP)

Как вы можете видеть перед рисованием текстуры 2d, другие типы текстур отключены. Нужно ли в устаревшем opengl?

1 Ответ

2 голосов
/ 04 октября 2019

Этот кодекс следует принципу быть хорошим гостем и убирать за собой. Поскольку OpenGL является конечным автоматом, может случиться так, что этот код вызывается из места, в котором ожидается, что конечный автомат находится в том же состоянии после выполнения кода, как и прежде.

Существует определенный приоритет текстурированияцелей, и если вы хотите использовать 2D-текстуры, включенные 3D, кубы и прямоугольники будут мешать этому, поэтому вы должны сначала отключить их. Но затем, как только вы закончите, вы вернете состояние.

Это хорошая практика, особенно в библиотеках и плагинах.

...