Report float and half-float color attachments on GL and GLES

Abierto
#139 0 comentarios 0 reacciones 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
3/5
Tiempo estimado
1-2 días
Aptitud para principiantes
68/100
Tipo de issue
Error
Claridad
Bien especificado
Estado de actividad
Activo
Stack tecnológico
cpp
Área
backend

Línea de trabajo

Start in source/renderer/ore/gl/ore_context_gl.cpp, where ContextGL::Make() sets GL feature flags and checks extensions. Review the desktop GL and OpenGL ES branches, then build or run the renderer's available GL tests. Done when desktop GL reports float and half-float color attachments, desktop GL 4.3+ reports storage buffers when fragment shader storage blocks are supported, and GLES detects GL_EXT_color_buffer_half_float.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

Report float and half-float color attachments on GL and GLES.

- source/renderer/ore/gl/ore_context_gl.cpp: Ore GL features: report float and half-float color attachments on desktop GL, where they are core since 3.0 and the ES-only GL_EXT_color_buffer_float is never listed; desktop GL 4.3+ also reports storageBuffers when fragment shaders can bind shader storage blocks
- source/renderer/ore/gl/ore_context_gl.cpp: Ore GL features: detect GL_EXT_color_buffer_half_float on OpenGL ES, which makes 16-bit float color attachments renderable without the full-float extension

diff --git a/source/renderer/ore/gl/ore_context_gl.cpp b/source/renderer/ore/gl/ore_context_gl.cpp
index 719846374383899a0cf1a0147898a6414b8a4b4a..90ccf9c95c1b557af44258701d75769168d666a1 100644
--- a/source/renderer/ore/gl/ore_context_gl.cpp
+++ b/source/renderer/ore/gl/ore_context_gl.cpp
@@ -341,6 +341,23 @@ std::unique_ptr<ContextGL> ContextGL::Make()
   f.etc2 = true; // GLES3 mandates ETC2.
   f.astc = false;
 
+#ifdef RIVE_DESKTOP_GL
+  f.colorBufferFloat = true;
+  f.colorBufferHalfFloat = true;
+#ifdef GL_MAX_FRAGMENT_SHADER_STORAGE_BLOCKS
+  // Desktop GL 4.3+ binds shader storage buffers to graphics stages.
+  {
+    GLint major = 0, minor = 0, fragmentSSBOs = 0;
+    glGetIntegerv(GL_MAJOR_VERSION, &major);
+    glGetIntegerv(GL_MINOR_VERSION, &minor);
+    if (major > 4 || (major == 4 && minor >= 3))
+      glGetIntegerv(GL_MAX_FRAGMENT_SHADER_STORAGE_BLOCKS,
+             &fragmentSSBOs);
+    f.storageBuffers = fragmentSSBOs > 0;
+  }
+#endif
+#endif
+
   // Query limits.
   GLint maxTexSize = 0, maxCubeSize = 0, max3DSize = 0, maxUBOSize = 0;
   GLint maxDrawBuffers = 0, maxVertexAttribs = 0, maxTexUnits = 0;
@@ -383,6 +400,8 @@ std::unique_ptr<ContextGL> ContextGL::Make()
       f.colorBufferFloat = true;
       f.colorBufferHalfFloat = true;
     }
+    else if (strcmp(ext, "GL_EXT_color_buffer_half_float") == 0)
+      f.colorBufferHalfFloat = true;
     else if (strcmp(ext, "GL_EXT_texture_filter_anisotropic") == 0)
       f.anisotropicFiltering = true;
     else if (strcmp(ext, "GL_KHR_texture_compression_astc_ldr") == 0)
Lenguaje dominante
C++
Estrellas
1.3k
Forks
133
Métricas de merge de PR
Sin PR fusionados en 30 d

Preparar el entorno

  • Incluye un Dockerfile o un archivo de Docker Compose
  • Sin plantilla de pull request
  • Sin guía de contribución

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de rive-app/rive-runtime

Todos los issues de rive-app/rive-runtime

Issues similares

Más issues de C++

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.