/* We only do this so these variables get initialized */
gsk_gl_device_find_gl_format (device,
format, 0,
&format,
&flags,
&gl_internal_format,
&gl_internal_srgb_format,
&self->gl_format[0],
&self->gl_type[0],
&swizzle);
if (is_srgb)
{ if (gl_internal_srgb_format != -1)
self->gl_internal_format[0] = gl_internal_srgb_format; else/* FIXME: Happens when the driver uses formats that it does not expose */
self->gl_internal_format[0] = gl_internal_format;
conv = GSK_GPU_CONVERSION_SRGB;
} else
{
self->gl_internal_format[0] = gl_internal_format;
conv = GSK_GPU_CONVERSION_NONE;
}
gsk_gpu_image_setup (GSK_GPU_IMAGE (self),
flags,
conv,
gdk_memory_format_get_default_shader_op (format),
format, width, height);
/* texture_id == 0 means backbuffer */
/* Check for non-standard framebuffer binding as we might not be using *thedefaultframebufferonsystemslikemacOSwherewe'veboundan *IOSurfacetoaGL_TEXTURE_RECTANGLE.Otherwise,noscissorclipwill *beappliedinthecommandqueuecausingoverdrawing.
*/
self->framebuffer_id = GDK_GL_CONTEXT_GET_CLASS (context)->get_default_framebuffer (context);
for (i = 0; i < n_textures; i++)
{ if (!gdk_memory_format_gl_format (format,
i,
gdk_gl_context_get_use_es (context),
&self->gl_internal_format[i],
&srgb_format,
&self->gl_format[i],
&self->gl_type[i],
&swizzle[i]))
{
g_assert_not_reached ();
}
}
/* Only apply swizzle if really needed, might not even be *supportedifdefaultvaluesareset
*/ if (!gdk_swizzle_is_identity (swizzle[i]))
{
GLint gl_swizzle[4];
gdk_swizzle_to_gl (swizzle[i], gl_swizzle); /* Set each channel independently since GLES 3.0 doesn't support the iv method */
glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_R, gl_swizzle[0]);
glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_G, gl_swizzle[1]);
glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_B, gl_swizzle[2]);
glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_A, gl_swizzle[3]);
}
}
for (i = 0; i < n_textures; i++)
{
self->texture_id[i] = tex_id[i]; if (mem_id)
self->memory_id[i] = mem_id[i];
}
self->semaphore_id = semaphore_id;
self->owns_texture = take_ownership;
/* XXX: We're waiting for the semaphore here, which is quite early. *Andunexpected. *Butitmeansweonlywaitonce.
* So we got that going for us, which is nice. */ if (semaphore_id)
{
glWaitSemaphoreEXT (semaphore_id, 0, NULL,
n_textures, tex_id, (GLenum[1]) {GL_LAYOUT_GENERAL_EXT });
} return GSK_GPU_IMAGE (self);
}
switch (status)
{ case GL_FRAMEBUFFER_COMPLETE: break;
case GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT:
g_critical ("glCheckFramebufferStatus() returned GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT. Expect broken rendering."); break;
case GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS:
g_critical ("glCheckFramebufferStatus() returned GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS. Expect broken rendering."); break;
case GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT:
g_critical ("glCheckFramebufferStatus() returned GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT. Expect broken rendering."); break;
case GL_FRAMEBUFFER_UNSUPPORTED:
g_critical ("glCheckFramebufferStatus() returned GL_FRAMEBUFFER_UNSUPPORTED. Expect broken rendering."); break;
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.