97 lines
3.4 KiB
Diff
97 lines
3.4 KiB
Diff
|
From 78636289b073d67209a20145ef0dc003f2d77db6 Mon Sep 17 00:00:00 2001
|
||
|
From: Sian Cao <yinshuiboy@gmail.com>
|
||
|
Date: Tue, 12 Apr 2016 11:36:51 +0800
|
||
|
Subject: Add GL_ARB_shader_texture_lod support
|
||
|
|
||
|
The patch is used to do lod biased texturing. I can achieve
|
||
|
faster blurring of images instead of using large blur radius.
|
||
|
|
||
|
Signed-off-by:
|
||
|
Sian Cao <yinshuiboy@gmail.com>: initial
|
||
|
|
||
|
---
|
||
|
cogl/cogl-context.h | 1 +
|
||
|
cogl/cogl-glsl-shader.c | 13 +++++++++++--
|
||
|
cogl/cogl-types.h | 3 ++-
|
||
|
cogl/driver/gl/gl/cogl-driver-gl.c | 7 +++++++
|
||
|
4 files changed, 21 insertions(+), 3 deletions(-)
|
||
|
|
||
|
diff --git a/cogl/cogl-context.h b/cogl/cogl-context.h
|
||
|
index 07badeb..261ce49 100644
|
||
|
--- a/cogl/cogl-context.h
|
||
|
+++ b/cogl/cogl-context.h
|
||
|
@@ -290,6 +290,7 @@ typedef enum _CoglFeatureID
|
||
|
COGL_FEATURE_ID_PER_VERTEX_POINT_SIZE,
|
||
|
COGL_FEATURE_ID_TEXTURE_RG,
|
||
|
COGL_FEATURE_ID_BUFFER_AGE,
|
||
|
+ COGL_FEATURE_ID_SHADER_TEXTURE_LOD,
|
||
|
|
||
|
/*< private >*/
|
||
|
_COGL_N_FEATURE_IDS /*< skip >*/
|
||
|
diff --git a/cogl/cogl-glsl-shader.c b/cogl/cogl-glsl-shader.c
|
||
|
index 196e0c7..4fb0eb5 100644
|
||
|
--- a/cogl/cogl-glsl-shader.c
|
||
|
+++ b/cogl/cogl-glsl-shader.c
|
||
|
@@ -87,8 +87,8 @@ _cogl_glsl_shader_set_source_with_boilerplate (CoglContext *ctx,
|
||
|
const char *vertex_boilerplate;
|
||
|
const char *fragment_boilerplate;
|
||
|
|
||
|
- const char **strings = g_alloca (sizeof (char *) * (count_in + 4));
|
||
|
- GLint *lengths = g_alloca (sizeof (GLint) * (count_in + 4));
|
||
|
+ const char **strings = g_alloca (sizeof (char *) * (count_in + 5));
|
||
|
+ GLint *lengths = g_alloca (sizeof (GLint) * (count_in + 5));
|
||
|
char *version_string;
|
||
|
int count = 0;
|
||
|
|
||
|
@@ -111,6 +111,15 @@ _cogl_glsl_shader_set_source_with_boilerplate (CoglContext *ctx,
|
||
|
lengths[count++] = sizeof (texture_3d_extension) - 1;
|
||
|
}
|
||
|
|
||
|
+ if (_cogl_has_private_feature (ctx, COGL_PRIVATE_FEATURE_GL_PROGRAMMABLE) &&
|
||
|
+ cogl_has_feature (ctx, COGL_FEATURE_ID_SHADER_TEXTURE_LOD))
|
||
|
+ {
|
||
|
+ static const char shader_texture_lod_ext[] =
|
||
|
+ "#extension GL_ARB_shader_texture_lod : enable\n";
|
||
|
+ strings[count] = shader_texture_lod_ext;
|
||
|
+ lengths[count++] = sizeof (shader_texture_lod_ext) - 1;
|
||
|
+ }
|
||
|
+
|
||
|
if (shader_gl_type == GL_VERTEX_SHADER)
|
||
|
{
|
||
|
strings[count] = vertex_boilerplate;
|
||
|
diff --git a/cogl/cogl-types.h b/cogl/cogl-types.h
|
||
|
index 6accf8d..77964c6 100644
|
||
|
--- a/cogl/cogl-types.h
|
||
|
+++ b/cogl/cogl-types.h
|
||
|
@@ -470,7 +470,8 @@ typedef enum
|
||
|
COGL_FEATURE_MAP_BUFFER_FOR_READ = (1 << 21),
|
||
|
COGL_FEATURE_MAP_BUFFER_FOR_WRITE = (1 << 22),
|
||
|
COGL_FEATURE_ONSCREEN_MULTIPLE = (1 << 23),
|
||
|
- COGL_FEATURE_DEPTH_TEXTURE = (1 << 24)
|
||
|
+ COGL_FEATURE_DEPTH_TEXTURE = (1 << 24),
|
||
|
+ COGL_FEATURE_SHADER_TEXTURE_LOD = (1 << 25)
|
||
|
} CoglFeatureFlags;
|
||
|
|
||
|
/**
|
||
|
diff --git a/cogl/driver/gl/gl/cogl-driver-gl.c b/cogl/driver/gl/gl/cogl-driver-gl.c
|
||
|
index 716d1dd..f305b6a 100644
|
||
|
--- a/cogl/driver/gl/gl/cogl-driver-gl.c
|
||
|
+++ b/cogl/driver/gl/gl/cogl-driver-gl.c
|
||
|
@@ -568,6 +568,13 @@ _cogl_driver_update_features (CoglContext *ctx,
|
||
|
COGL_FEATURE_ID_TEXTURE_RECTANGLE, TRUE);
|
||
|
}
|
||
|
|
||
|
+ if (_cogl_check_extension ("GL_ARB_shader_texture_lod", gl_extensions))
|
||
|
+ {
|
||
|
+ flags |= COGL_FEATURE_SHADER_TEXTURE_LOD;
|
||
|
+ COGL_FLAGS_SET (ctx->features,
|
||
|
+ COGL_FEATURE_ID_SHADER_TEXTURE_LOD, TRUE);
|
||
|
+ }
|
||
|
+
|
||
|
if (ctx->glTexImage3D)
|
||
|
{
|
||
|
flags |= COGL_FEATURE_TEXTURE_3D;
|
||
|
--
|
||
|
2.9.5
|
||
|
|