У меня следующая проблема:
У меня правильные цвета текстур на iOS с использованием OpenGL ES 2.0 vbos или вершинных массивов, но неправильные цвета на Windows и MAC. Код приложения такой же, только некоторые отличия в системе рендеринга. (Также почти одинаковые шейдеры для всех систем). (Обычные текстуры отлично работают на всех системах - просто квад с текстурой, нарисованной с помощью массива вершин - glDrawElements (GL_TRIANGLES, primitiveCount * 3, indexSize, indexList))
Я загрузил картинку, чтобы показать, что вообще происходит!
Сначала я подумал, что это может быть проблема с вершинным шейдером, но думаю, что нет. Но, возможно, это так, поэтому я выложу это:
GLbyte vertexShaderFile[] =
"attribute vec4 inVertexPosition; \n"
"attribute vec4 inVertexColor; \n"
"attribute vec4 inTexCoord0; \n"
"uniform mat4 uOrthoMatrix; \n"
"varying vec4 varVertexColor; \n"
"varying vec4 varTexCoord; \n"
" \n"
"void main(void) \n"
"{ \n"
" gl_Position = uOrthoMatrix * inVertexPosition; \n"
" varVertexColor = inVertexColor.bgra; \n"
" varTexCoord = inTexCoord0; \n"
"} \n";
GLbyte fragmentShaderFile[] =
#if defined(FHZ_IOS) || defined(FHZ_WIN)
"precision mediump float; \n"
#endif // FHZ_IOS
"uniform bool uUseTexture; \n"
"uniform sampler2D uTextureUnit; \n"
"uniform bool uAlphaTest; \n"
"uniform float uAlphaValue; \n"
"varying vec4 varVertexColor; \n"
"varying vec4 varTexCoord; \n"
" \n"
"void main(void) \n"
"{ \n"
" vec4 color = varVertexColor; \n"
" vec4 texel = texture2D(uTextureUnit, varTexCoord.xy); \n"
" if(uUseTexture) \n"
" { \n"
" color *= texel.bgra; \n"
" } \n"
" \n"
" if(uAlphaTest && !(color.a > uAlphaValue)) \n"
" discard; \n"
" \n"
" gl_FragColor = color; \n"
"}
\n";
Когда я обмениваюсь vec4 color = varVertexColor; с фиксированным вектором цвета vec4 (1,1,1,1); Цветные частицы имеют тот же цвет, что и обычная текстура на ВСЕХ платформах, но я действительно не
понять, почему это имеет значение. Так что это привело меня к мнению, что это может быть неправильной инициализацией open gl 2.0 на Windows и Mac - потому что я должен сделать это самостоятельно. На iOS это уже «сделано» системой нижележащих слоев.
Я надеюсь, что кто-то может помочь мне с этой проблемой:)