Почему смешивание OpenGL не работает в HTC Desire?

Кто-нибудь знает, как включить смешивание в OpenGL (android) на HTC Desire. Я пытаюсь нарисовать цветные треугольники и использую альфа-значение цветового буфера, чтобы смешать их с фоном (или другим треугольником).

Работает как на эмуляторе (2.1), так и на htc hero 2.1, но не по моему желанию с 2.2. Есть ли какая-то аппаратная разница между героем и желанием, которое вызывает это?

Основной материал из кода (не в порядке):

gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);

gl.glEnable(GL10.GL_BLEND);         
gl.glBlendFunc(GL10.GL_SRC_ALPHA, GL10.GL_ONE_MINUS_SRC_ALPHA);

private final static float[] colors = {
       1f, 0f, 0f, 0.5f, // point 0 red
       1f, 0f, 0f, 0.5f, // point 1 red
       1f, 0f, 0f, 0.5f, // point 2 red
       1f, 0f, 0f, 0.5f, // point 3 red

       1f, 0f, 0f, 0.5f, // point 4 red
       1f, 0f, 0f, 0.5f, // point 5 red
       1f, 0f, 0f, 0.5f, // point 6 red
       1f, 0f, 0f, 0.5f, // point 7 red
};

PS. Я могу предоставить больше кода, если кому-то это нужно...

1 ответ

Решение

Джонас, твой комментарий по поводу освещения кажется правильным, и теперь я думаю, что у нас есть ответ. OpenGL ES 1.1.12 Спецификация состояний The value of A produced by lighting is the alpha value associated with dcmгде dcm - материал диффузного цвета.

Если вы включили COLOR_MATERIALзатем диффузный цвет материала и цвет окружающей среды взяты из текущего цвета вершины. Это будет означать, что Desire неверно, а эмулятор корректен.

Если вы отключили COLROR_MATERIAL (состояние по умолчанию), тогда материал рассеянного цвета устанавливается с glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, ptrTo4Floats), Это будет означать, что Desire верен, а эмулятор неверен.

Другие вопросы по тегам