[virglrenderer-devel] [PATCH 2/5] vrend: Replace all uses of glDrawBuffer with glDrawBuffers

Jakob Bornecrantz jakob.bornecrantz at collabora.com
Mon Nov 27 11:44:42 UTC 2017


OpenGL ES does not have glDrawBuffer, but it does have glDrawBuffers. It has
been available in Desktop OpenGL since 2.0 and was exposed in OpenGL ES 3.0.

Signed-off-by: Jakob Bornecrantz <jakob.bornecrantz at collabora.com>
---
 src/vrend_blitter.c  | 9 +++++++--
 src/vrend_formats.c  | 9 +++++++--
 src/vrend_renderer.c | 6 +++++-
 3 files changed, 19 insertions(+), 5 deletions(-)

diff --git a/src/vrend_blitter.c b/src/vrend_blitter.c
index 035c409..0b4112a 100644
--- a/src/vrend_blitter.c
+++ b/src/vrend_blitter.c
@@ -535,6 +535,7 @@ void vrend_renderer_blit_gl(struct vrend_context *ctx,
                             const struct pipe_blit_info *info)
 {
    struct vrend_blitter_ctx *blit_ctx = &vrend_blit_ctx;
+   GLuint buffers;
    GLuint prog_id;
    GLuint fs_id;
    GLint lret;
@@ -597,7 +598,8 @@ void vrend_renderer_blit_gl(struct vrend_context *ctx,
    glBindFramebuffer(GL_FRAMEBUFFER_EXT, blit_ctx->fb_id);
    vrend_fb_bind_texture(dst_res, 0, info->dst.level, info->dst.box.z);
 
-   glDrawBuffer(GL_COLOR_ATTACHMENT0_EXT);
+   buffers = GL_COLOR_ATTACHMENT0_EXT;
+   glDrawBuffers(1, &buffers);
 
    glBindTexture(src_res->target, src_res->id);
 
@@ -635,7 +637,10 @@ void vrend_renderer_blit_gl(struct vrend_context *ctx,
       glBindFramebuffer(GL_FRAMEBUFFER_EXT, blit_ctx->fb_id);
       vrend_fb_bind_texture(dst_res, 0, info->dst.level, dst_z);
 
-      glDrawBuffer(GL_COLOR_ATTACHMENT0_EXT);
+
+
+      buffers = GL_COLOR_ATTACHMENT0_EXT;
+      glDrawBuffers(1, &buffers);
       blitter_set_texcoords(blit_ctx, src_res, info->src.level,
                             info->src.box.z + src_z, 0,
                             info->src.box.x, info->src.box.y,
diff --git a/src/vrend_formats.c b/src/vrend_formats.c
index d7f1c6d..ce72c12 100644
--- a/src/vrend_formats.c
+++ b/src/vrend_formats.c
@@ -253,7 +253,9 @@ static void vrend_add_formats(struct vrend_format_table *table, int num_entries)
 {
   int i;
   uint32_t binding = 0;
+  GLuint buffers;
   GLuint tex_id, fb_id;
+
   for (i = 0; i < num_entries; i++) {
     GLenum status;
     bool is_depth = false;
@@ -304,11 +306,14 @@ static void vrend_add_formats(struct vrend_format_table *table, int num_entries)
       glFramebufferTexture2D(GL_FRAMEBUFFER_EXT, attachment, GL_TEXTURE_2D, tex_id, 0);
 
       is_depth = true;
-      glDrawBuffer(GL_NONE);
+
+      buffers = GL_NONE;
+      glDrawBuffers(1, &buffers);
     } else {
       glFramebufferTexture2D(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_2D, tex_id, 0);
 
-      glDrawBuffer(GL_COLOR_ATTACHMENT0);
+      buffers = GL_COLOR_ATTACHMENT0_EXT;
+      glDrawBuffers(1, &buffers);
     }
 
     status = glCheckFramebufferStatus(GL_FRAMEBUFFER);
diff --git a/src/vrend_renderer.c b/src/vrend_renderer.c
index a70167a..17f4b82 100644
--- a/src/vrend_renderer.c
+++ b/src/vrend_renderer.c
@@ -4676,6 +4676,8 @@ static int vrend_renderer_transfer_write_iov(struct vrend_context *ctx,
       gltype = tex_conv_table[res->base.format].gltype;
 
       if ((!vrend_state.use_core_profile) && (res->y_0_top)) {
+         GLuint buffers;
+
          if (res->readback_fb_id == 0 || res->readback_fb_level != info->level) {
             GLuint fb_id;
             if (res->readback_fb_id)
@@ -4690,7 +4692,9 @@ static int vrend_renderer_transfer_write_iov(struct vrend_context *ctx,
          } else {
             glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, res->readback_fb_id);
          }
-         glDrawBuffer(GL_COLOR_ATTACHMENT0_EXT);
+
+         buffers = GL_COLOR_ATTACHMENT0_EXT;
+         glDrawBuffers(1, &buffers);
          vrend_blend_enable(ctx, false);
          vrend_depth_test_enable(ctx, false);
          vrend_alpha_test_enable(ctx, false);
-- 
2.11.0



More information about the virglrenderer-devel mailing list