20 const function<
void()> &gl_context_disable)
21 : gl_context_enable_(gl_context_enable), gl_context_disable_(gl_context_disable)
63 glActiveTexture(GL_TEXTURE0);
64 glBindTexture(GL_TEXTURE_2D,
texture_.gl_id);
66 GL_TEXTURE_2D, 0, GL_RGBA16F, texture_width, texture_height, 0, GL_RGBA, GL_HALF_FLOAT, 0);
69 glBindTexture(GL_TEXTURE_2D, 0);
87 glBindBuffer(GL_PIXEL_UNPACK_BUFFER,
texture_.gl_pbo_id);
88 glBufferData(GL_PIXEL_UNPACK_BUFFER, size_in_bytes, 0, GL_DYNAMIC_DRAW);
89 glBindBuffer(GL_PIXEL_UNPACK_BUFFER, 0);
116 glBindBuffer(GL_PIXEL_UNPACK_BUFFER,
texture_.gl_pbo_id);
118 half4 *mapped_rgba_pixels =
reinterpret_cast<half4 *
>(
119 glMapBuffer(GL_PIXEL_UNPACK_BUFFER, GL_WRITE_ONLY));
120 if (!mapped_rgba_pixels) {
121 LOG(ERROR) <<
"Error mapping OpenGLDisplayDriver pixel buffer object.";
127 memset(
reinterpret_cast<void *
>(mapped_rgba_pixels),
129 texture_width * texture_height *
sizeof(
half4));
133 return mapped_rgba_pixels;
138 glUnmapBuffer(GL_PIXEL_UNPACK_BUFFER);
140 glBindBuffer(GL_PIXEL_UNPACK_BUFFER, 0);
198 glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
202 glActiveTexture(GL_TEXTURE0);
203 glBindTexture(GL_TEXTURE_2D,
texture_.gl_id);
207 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
210 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
218 GLuint vertex_array_object;
219 glGenVertexArrays(1, &vertex_array_object);
220 glBindVertexArray(vertex_array_object);
225 glEnableVertexAttribArray(texcoord_attribute);
226 glEnableVertexAttribArray(position_attribute);
228 glVertexAttribPointer(
229 texcoord_attribute, 2, GL_FLOAT, GL_FALSE, 4 *
sizeof(
float), (
const GLvoid *)0);
230 glVertexAttribPointer(position_attribute,
235 (
const GLvoid *)(
sizeof(
float) * 2));
237 glDrawArrays(GL_TRIANGLE_FAN, 0, 4);
239 glBindBuffer(GL_ARRAY_BUFFER, 0);
240 glBindTexture(GL_TEXTURE_2D, 0);
242 glDeleteVertexArrays(1, &vertex_array_object);
269 LOG(ERROR) <<
"Error creating vertex buffer.";
288 glDeleteBuffers(1, &
texture_.gl_pbo_id);
293 glDeleteTextures(1, &
texture_.gl_id);
313 LOG(ERROR) <<
"Error creating texture.";
318 glActiveTexture(GL_TEXTURE0);
319 glBindTexture(GL_TEXTURE_2D,
texture_.gl_id);
320 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
321 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
322 glBindTexture(GL_TEXTURE_2D, 0);
325 glGenBuffers(1, &
texture_.gl_pbo_id);
327 LOG(ERROR) <<
"Error creating texture pixel buffer object.";
343 glBindBuffer(GL_PIXEL_UNPACK_BUFFER,
texture_.gl_pbo_id);
345 GL_TEXTURE_2D, 0, 0, 0,
texture_.width,
texture_.height, GL_RGBA, GL_HALF_FLOAT, 0);
346 glBindBuffer(GL_PIXEL_UNPACK_BUFFER, 0);
355 glBufferData(GL_ARRAY_BUFFER, 16 *
sizeof(
float),
NULL, GL_STREAM_DRAW);
357 float *vpointer =
reinterpret_cast<float *
>(glMapBuffer(GL_ARRAY_BUFFER, GL_WRITE_ONLY));
364 vpointer[2] =
params.full_offset.x;
365 vpointer[3] =
params.full_offset.y;
370 vpointer[7] =
params.full_offset.y;
374 vpointer[10] = (
float)
params.size.x +
params.full_offset.x;
379 vpointer[14] =
params.full_offset.x;
380 vpointer[15] = (
float)
params.size.y +
params.full_offset.y;
382 glUnmapBuffer(GL_ARRAY_BUFFER);
typedef float(TangentPoint)[2]
bool gl_draw_resources_created_
void vertex_buffer_update(const Params ¶ms)
virtual void unmap_texture_buffer() override
virtual void update_end() override
bool gl_draw_resources_ensure()
bool gl_texture_resources_ensure()
virtual bool update_begin(const Params ¶ms, int texture_width, int texture_height) override
virtual void graphics_interop_deactivate() override
bool gl_draw_resource_creation_attempted_
virtual void graphics_interop_activate() override
function< bool()> gl_context_enable_
virtual half4 * map_texture_buffer() override
OpenGLShader display_shader_
function< void()> gl_context_disable_
virtual GraphicsInterop graphics_interop_get() override
virtual void draw(const Params ¶ms) override
void gl_resources_destroy()
virtual void clear() override
virtual void next_tile_begin() override
struct OpenGLDisplayDriver::@1225 texture_
OpenGLDisplayDriver(const function< bool()> &gl_context_enable, const function< void()> &gl_context_disable)
void texture_update_if_needed()
int get_position_attrib_location()
void bind(int width, int height)
int get_tex_coord_attrib_location()
#define CCL_NAMESPACE_END
#define DCHECK(expression)