87
87
BOOST_THROW_EXCEPTION(std::runtime_error(object_info_err));
93
GLState(GLint attrib_loc)
94
: attrib_loc{attrib_loc}
96
glGetIntegerv(GL_CURRENT_PROGRAM, &program);
97
glGetIntegerv(GL_TEXTURE_BINDING_2D, &texture);
98
glGetIntegerv(GL_ARRAY_BUFFER_BINDING, &buffer);
99
glGetIntegerv(GL_ACTIVE_TEXTURE, &active_texture_unit);
102
glGetVertexAttribiv(attrib_loc, GL_VERTEX_ATTRIB_ARRAY_ENABLED, &attrib_enabled);
103
glGetVertexAttribiv(attrib_loc, GL_VERTEX_ATTRIB_ARRAY_SIZE, &attrib_size);
104
glGetVertexAttribiv(attrib_loc, GL_VERTEX_ATTRIB_ARRAY_TYPE, &attrib_type);
105
glGetVertexAttribiv(attrib_loc, GL_VERTEX_ATTRIB_ARRAY_NORMALIZED, &attrib_normalized);
106
glGetVertexAttribiv(attrib_loc, GL_VERTEX_ATTRIB_ARRAY_STRIDE, &attrib_stride);
107
glGetVertexAttribPointerv(attrib_loc, GL_VERTEX_ATTRIB_ARRAY_POINTER, &attrib_pointer);
111
GLState() : GLState{invalid_attrib_loc} {}
115
glUseProgram(program);
116
glBindTexture(GL_TEXTURE_2D, texture);
117
glBindBuffer(GL_ARRAY_BUFFER, buffer);
118
glActiveTexture(active_texture_unit);
121
glVertexAttribPointer(attrib_loc, attrib_size, attrib_type,
122
attrib_normalized, attrib_stride, attrib_pointer);
124
glEnableVertexAttribArray(attrib_loc);
126
glDisableVertexAttribArray(attrib_loc);
131
static GLint const invalid_attrib_loc = -1;
135
GLint active_texture_unit = 0;
136
GLint attrib_loc = invalid_attrib_loc;
137
GLint attrib_enabled = 0;
138
GLint attrib_size = 0;
139
GLint attrib_type = 0;
140
GLint attrib_normalized = 0;
141
GLint attrib_stride = 0;
142
GLvoid* attrib_pointer = nullptr;
92
147
mt::ImageRenderer::ImageRenderer(const uint8_t* pixel_data, mir::geometry::Size size,
93
148
uint32_t bytes_per_pixel)
95
152
resources.setup();
97
154
/* Upload the texture */
173
230
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
175
232
glUniform1i(tex_loc, 0);
176
glBindTexture(GL_TEXTURE_2D, 0);
179
235
glGenBuffers(1, &vertex_attribs_vbo);
181
237
glBindBuffer(GL_ARRAY_BUFFER, vertex_attribs_vbo);
182
238
glBufferData(GL_ARRAY_BUFFER, sizeof(vertex_attribs),
183
239
glm::value_ptr(vertex_attribs[0]), GL_STATIC_DRAW);
185
glBindBuffer(GL_ARRAY_BUFFER, 0);
190
243
void mt::ImageRenderer::render()
245
GLState gl_state(resources.position_attr_loc);
192
247
glUseProgram(resources.program);
194
249
glActiveTexture(GL_TEXTURE0);