Корректируйте цвета текстур на iOS, используя OpenGL ES 2.0 vbos / varrays, но неправильные цвета на Windows и MAC - PullRequest
1 голос
/ 14 июня 2011

У меня следующая проблема:

У меня правильные цвета текстур на iOS с использованием OpenGL ES 2.0 vbos или вершинных массивов, но неправильные цвета на Windows и MAC. Код приложения такой же, только некоторые отличия в системе рендеринга. (Также почти одинаковые шейдеры для всех систем). (Обычные текстуры отлично работают на всех системах - просто квад с текстурой, нарисованной с помощью массива вершин - glDrawElements (GL_TRIANGLES, primitiveCount * 3, indexSize, indexList))

Я загрузил картинку, чтобы показать, что вообще происходит!

wrong colors on windows and mac for the sourrounding particles (correct one on iOS - blue)

Сначала я подумал, что это может быть проблема с вершинным шейдером, но думаю, что нет. Но, возможно, это так, поэтому я выложу это:

            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 это уже «сделано» системой нижележащих слоев.

Я надеюсь, что кто-то может помочь мне с этой проблемой:)

...