mirror of
https://gitlab.freedesktop.org/cairo/cairo.git
synced 2026-05-05 01:48:07 +02:00
gl: Remove GL 1.x ARB shader implementation
Shaders for GL 1.x ARB are served by the same implementation as GL 2.x and therefore a dedicated ARB implementation is not needed any more.
This commit is contained in:
parent
a6facced8d
commit
6373db8441
1 changed files with 0 additions and 187 deletions
|
|
@ -110,179 +110,6 @@ _cairo_gl_shader_compile (cairo_gl_context_t *ctx,
|
|||
cairo_gl_var_type_t mask,
|
||||
const char *fragment_text);
|
||||
|
||||
/* ARB_shader_objects / ARB_vertex_shader / ARB_fragment_shader extensions
|
||||
API. */
|
||||
static void
|
||||
compile_shader_arb (cairo_gl_context_t *ctx, GLuint *shader,
|
||||
GLenum type, const char *text)
|
||||
{
|
||||
const char* strings[1] = { text };
|
||||
GLint gl_status;
|
||||
cairo_gl_dispatch_t *dispatch = &ctx->dispatch;
|
||||
|
||||
*shader = dispatch->CreateShader (type);
|
||||
dispatch->ShaderSource (*shader, 1, strings, 0);
|
||||
dispatch->CompileShader (*shader);
|
||||
dispatch->GetShaderiv (*shader, GL_COMPILE_STATUS, &gl_status);
|
||||
if (gl_status == GL_FALSE) {
|
||||
GLint log_size;
|
||||
dispatch->GetShaderiv (*shader, GL_INFO_LOG_LENGTH, &log_size);
|
||||
if (0 < log_size) {
|
||||
char *log = _cairo_malloc (log_size);
|
||||
GLint chars;
|
||||
|
||||
log[log_size - 1] = '\0';
|
||||
dispatch->GetShaderInfoLog (*shader, log_size, &chars, log);
|
||||
printf ("OpenGL shader compilation failed. Shader:\n"
|
||||
"%s\n"
|
||||
"OpenGL compilation log:\n"
|
||||
"%s\n",
|
||||
text, log);
|
||||
|
||||
free (log);
|
||||
} else {
|
||||
printf ("OpenGL shader compilation failed.\n");
|
||||
}
|
||||
|
||||
ASSERT_NOT_REACHED;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
link_shader_arb (cairo_gl_context_t *ctx, GLuint *program, GLuint vert, GLuint frag)
|
||||
{
|
||||
GLint gl_status;
|
||||
cairo_gl_dispatch_t *dispatch = &ctx->dispatch;
|
||||
|
||||
*program = dispatch->CreateProgram ();
|
||||
dispatch->AttachShader (*program, vert);
|
||||
dispatch->AttachShader (*program, frag);
|
||||
dispatch->LinkProgram (*program);
|
||||
dispatch->GetProgramiv (*program, GL_LINK_STATUS, &gl_status);
|
||||
if (gl_status == GL_FALSE) {
|
||||
GLint log_size;
|
||||
dispatch->GetProgramiv (*program, GL_INFO_LOG_LENGTH, &log_size);
|
||||
if (0 < log_size) {
|
||||
char *log = _cairo_malloc (log_size);
|
||||
GLint chars;
|
||||
|
||||
log[log_size - 1] = '\0';
|
||||
dispatch->GetProgramInfoLog (*program, log_size, &chars, log);
|
||||
printf ("OpenGL shader link failed:\n%s\n", log);
|
||||
|
||||
free (log);
|
||||
} else {
|
||||
printf ("OpenGL shader link failed.\n");
|
||||
}
|
||||
|
||||
ASSERT_NOT_REACHED;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
destroy_shader_arb (cairo_gl_context_t *ctx, GLuint shader)
|
||||
{
|
||||
ctx->dispatch.DeleteShader (shader);
|
||||
}
|
||||
|
||||
static void
|
||||
destroy_program_arb (cairo_gl_context_t *ctx, GLuint shader)
|
||||
{
|
||||
ctx->dispatch.DeleteProgram (shader);
|
||||
}
|
||||
|
||||
static void
|
||||
bind_float_arb (cairo_gl_context_t *ctx,
|
||||
cairo_gl_shader_t *shader,
|
||||
const char *name,
|
||||
float value)
|
||||
{
|
||||
cairo_gl_dispatch_t *dispatch = &ctx->dispatch;
|
||||
GLint location = dispatch->GetUniformLocation (shader->program, name);
|
||||
assert (location != -1);
|
||||
dispatch->Uniform1f (location, value);
|
||||
}
|
||||
|
||||
static void
|
||||
bind_vec2_arb (cairo_gl_context_t *ctx,
|
||||
cairo_gl_shader_t *shader,
|
||||
const char *name,
|
||||
float value0,
|
||||
float value1)
|
||||
{
|
||||
cairo_gl_dispatch_t *dispatch = &ctx->dispatch;
|
||||
GLint location = dispatch->GetUniformLocation (shader->program, name);
|
||||
assert (location != -1);
|
||||
dispatch->Uniform2f (location, value0, value1);
|
||||
}
|
||||
|
||||
static void
|
||||
bind_vec3_arb (cairo_gl_context_t *ctx,
|
||||
cairo_gl_shader_t *shader,
|
||||
const char *name,
|
||||
float value0,
|
||||
float value1,
|
||||
float value2)
|
||||
{
|
||||
cairo_gl_dispatch_t *dispatch = &ctx->dispatch;
|
||||
GLint location = dispatch->GetUniformLocation (shader->program, name);
|
||||
assert (location != -1);
|
||||
dispatch->Uniform3f (location, value0, value1, value2);
|
||||
}
|
||||
|
||||
static void
|
||||
bind_vec4_arb (cairo_gl_context_t *ctx,
|
||||
cairo_gl_shader_t *shader,
|
||||
const char *name,
|
||||
float value0,
|
||||
float value1,
|
||||
float value2,
|
||||
float value3)
|
||||
{
|
||||
cairo_gl_dispatch_t *dispatch = &ctx->dispatch;
|
||||
GLint location = dispatch->GetUniformLocation (shader->program, name);
|
||||
assert (location != -1);
|
||||
dispatch->Uniform4f (location, value0, value1, value2, value3);
|
||||
}
|
||||
|
||||
static void
|
||||
bind_matrix_arb (cairo_gl_context_t *ctx,
|
||||
cairo_gl_shader_t *shader,
|
||||
const char *name,
|
||||
cairo_matrix_t* m)
|
||||
{
|
||||
cairo_gl_dispatch_t *dispatch = &ctx->dispatch;
|
||||
GLint location = dispatch->GetUniformLocation (shader->program, name);
|
||||
float gl_m[16] = {
|
||||
m->xx, m->xy, m->x0,
|
||||
m->yx, m->yy, m->y0,
|
||||
0, 0, 1
|
||||
};
|
||||
assert (location != -1);
|
||||
dispatch->UniformMatrix3fv (location, 1, GL_TRUE, gl_m);
|
||||
}
|
||||
|
||||
static void
|
||||
bind_texture_arb (cairo_gl_context_t *ctx,
|
||||
cairo_gl_shader_t *shader,
|
||||
const char *name,
|
||||
cairo_gl_tex_t tex_unit)
|
||||
{
|
||||
cairo_gl_dispatch_t *dispatch = &ctx->dispatch;
|
||||
GLint location = dispatch->GetUniformLocation (shader->program, name);
|
||||
assert (location != -1);
|
||||
dispatch->Uniform1i (location, tex_unit);
|
||||
}
|
||||
|
||||
static void
|
||||
use_program_arb (cairo_gl_context_t *ctx, cairo_gl_shader_t *shader)
|
||||
{
|
||||
if (shader)
|
||||
ctx->dispatch.UseProgram (shader->program);
|
||||
else
|
||||
ctx->dispatch.UseProgram (0);
|
||||
}
|
||||
|
||||
/* OpenGL Core 2.0 API. */
|
||||
static void
|
||||
compile_shader_core_2_0 (cairo_gl_context_t *ctx, GLuint *shader,
|
||||
|
|
@ -469,20 +296,6 @@ static const cairo_gl_shader_impl_t shader_impl_core_2_0 = {
|
|||
use_program_core_2_0,
|
||||
};
|
||||
|
||||
static const cairo_gl_shader_impl_t shader_impl_arb = {
|
||||
compile_shader_arb,
|
||||
link_shader_arb,
|
||||
destroy_shader_arb,
|
||||
destroy_program_arb,
|
||||
bind_float_arb,
|
||||
bind_vec2_arb,
|
||||
bind_vec3_arb,
|
||||
bind_vec4_arb,
|
||||
bind_matrix_arb,
|
||||
bind_texture_arb,
|
||||
use_program_arb,
|
||||
};
|
||||
|
||||
typedef struct _cairo_shader_cache_entry {
|
||||
cairo_cache_entry_t base;
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue