Aquí podría ser tu PUBLICIDAD


Cuando uso una textura GL_RGBA16F_ARB, contiene solo basura, pero no recibo ningún mensaje de error

votos
1

Genero una textura como esta:

GLuint id;

glGenTextures(1, &id);

glBindTexture(GL_TEXTURE_2D, id);

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);

glTexImage2D(
    GL_TEXTURE_2D, 0,
    GL_RGBA16,
    //GL_RGBA16F_ARB, //< Won't work
    256, 256, 0, GL_RGBA, GL_FLOAT, NULL
);

glBindTexture(GL_TEXTURE_2D, 0);

Lo adjunto a un objeto framebuffer (FBO) para renderizar a. Todo esto funciona como un encanto cuando configuro el formato interno GL_RGBA16. Sin embargo, necesito un rango dinámico más alto y estaba pensando que eso GL_RGBA16F_ARBpodría ser el truco.

Desafortunadamente, si reemplazo GL_RGBA16con GL_RGBA16F_ARBel código anterior, la textura parece dejar de funcionar. Nada de lo que trato de renderizar en el FBO / text sticks, y cuando uso la textura contiene basura al azar. (Una gran cantidad de color púrpura, como se ve) Esto no sería tan frustrante si hubiera recibido un mensaje de error insinuando lo que podría estar mal, pero parece que no puedo encontrar uno. En otras palabras, glGetError()regresa 0después de la glTexImage2Dllamada y glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT)vuelve GL_FRAMEBUFFER_COMPLETE_EXTcuando he adjuntado la textura

No me he equivocado con glClampColorARB(...)... aún :)

  1. ¿Me olvidé de buscar errores en un lugar / camino que no había pensado?
  2. ¿Las GL_RGBA16F_ARBtexturas requieren algún tratamiento especial que yo no haya dado?
  3. ¿Hay algo más que pueda estar mal?

Estoy perplejo, ya que todo funciona sin problemas con GL_RGBA16... :(

EDITAR: Cuando se usa GL_RGBA16F_ARB, el primer fotograma que trato de mostrar a la pantalla no lo hace. Me parece que debería recibir un mensaje de error en alguna parte ...?

EDITAR: Al inspeccionar el ejemplo del código de trabajo de ShadowIce, descubrí que los problemas desaparecían si cambiaba el búfer de profundidad en mi FBO, y daba glRenderBufferStorageEXT(...) GL_DEPTH_COMPONENT24como su segundo parámetro, en lugar de hacerlo GL_DEPTH_COMPONENT16. No tengo idea de por qué funciona, pero aparentemente funciona.

Además, el código de ShadowIce se rompe como el mío si hago la sustitución opuesta allí.

Publicado el 12/03/2009 a las 20:14
fuente por usuario Magnus Hoff
En otros idiomas...        العربية       

2 respuestas

votos
4

No debería haber nada especial que hacer para configurar un framebuffer con texturas float. Algunas cosas que verificaría:

  1. ¿Está el FBO vinculado y el búfer de dibujo / lectura configurado correctamente antes de llamar a glCheckFramebufferStatusEXT? También intente probarlo justo antes de dibujarlo.
  2. ¿La textura se ve bien después de un simple glClear con un color claro específico? En caso afirmativo, puede haber algún problema con los sombreadores (si los usa) o la forma en que dibuja en el FBO.
  3. ¿Están sus conductores actualizados? ¿Y el problema todavía existe en una PC con hardware diferente?
  4. ¿Qué tal GL_RGBA32F_ARB?

Editar:

  1. Compruebe la id de su framebuffer y su textura, también verifique si la id de textura coincide con la que está adjuntada a su fbo (con glGetFramebufferAttachmentParameteriv). Normalmente, supongo que todo está bien si funciona con una textura RGBA, pero los datos aleatorios (especialmente el violeta) son una buena señal de que no se escribió nada en la textura o no se borró correctamente.

He escrito una pequeña aplicación de ejemplo que debería funcionar, tal vez eso ayude. Solo lo he probado en Windows, por lo que para Linux necesitarás cambiarlo un poco: enlace

Respondida el 12/03/2009 a las 11:35
fuente por usuario Maurice Gilden


Aquí podría ser tu PUBLICIDAD


votos
1

GL_HALF_FLOAT_ARB podría funcionar como tipo en lugar de GL_FLOAT.

Respondida el 13/03/2009 a las 09:12
fuente por usuario SPWorley