static bool brw_fast_clear_init(struct brw_context *brw) { struct brw_fast_clear_state *clear; if (brw->fast_clear_state) { clear = brw->fast_clear_state; _mesa_BindVertexArray(clear->vao); _mesa_BindBuffer(GL_ARRAY_BUFFER, clear->vbo); return true; } brw->fast_clear_state = clear = malloc(sizeof *clear); if (clear == NULL) return false; memset(clear, 0, sizeof *clear); _mesa_GenVertexArrays(1, &clear->vao); _mesa_BindVertexArray(clear->vao); _mesa_GenBuffers(1, &clear->vbo); _mesa_BindBuffer(GL_ARRAY_BUFFER, clear->vbo); _mesa_VertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, sizeof(float) * 2, 0); _mesa_EnableVertexAttribArray(0); return true; }
static bool brw_fast_clear_init(struct brw_context *brw) { struct brw_fast_clear_state *clear; struct gl_context *ctx = &brw->ctx; if (brw->fast_clear_state) { clear = brw->fast_clear_state; _mesa_BindVertexArray(clear->vao); return true; } brw->fast_clear_state = clear = malloc(sizeof *clear); if (clear == NULL) return false; memset(clear, 0, sizeof *clear); _mesa_GenVertexArrays(1, &clear->vao); _mesa_BindVertexArray(clear->vao); clear->buf_obj = ctx->Driver.NewBufferObject(ctx, 0xDEADBEEF); if (clear->buf_obj == NULL) return false; clear->array_obj = _mesa_lookup_vao(ctx, clear->vao); assert(clear->array_obj != NULL); _mesa_update_array_format(ctx, clear->array_obj, VERT_ATTRIB_GENERIC(0), 2, GL_FLOAT, GL_RGBA, GL_FALSE, GL_FALSE, GL_FALSE, 0, true); _mesa_bind_vertex_buffer(ctx, clear->array_obj, VERT_ATTRIB_GENERIC(0), clear->buf_obj, 0, sizeof(float) * 2); _mesa_enable_vertex_array_attrib(ctx, clear->array_obj, VERT_ATTRIB_GENERIC(0)); return true; }