2015-02-17 1 views
0

У меня есть OpenGL 2.x код, на котором я хочу, чтобы запустить эти шейдеры:Преобразование шейдера в OpenGL 2.x?

static const char* YUYV_VS = "" 
    "#version 150\n" 
    "uniform mat4 u_pm;" 
    "uniform mat4 u_mm;" 
    "in vec4 a_pos;" 
    "in vec2 a_tex;" 
    "out vec2 v_tex;" 

    "void main() {" 
    " gl_Position = u_pm * u_mm * a_pos; " 
    " v_tex = a_tex;" 
    "}" 
    ""; 

static const char* YUYV_FS = "" 
    "#version 150\n" 
    "uniform sampler2D u_tex;" 
    "out vec4 outcol;" 
    "in vec2 v_tex;" 

    "const vec3 R_cf = vec3(1.164383, 0.000000, 1.596027);" 
    "const vec3 G_cf = vec3(1.164383, -0.391762, -0.812968);" 
    "const vec3 B_cf = vec3(1.164383, 2.017232, 0.000000);" 
    "const vec3 offset = vec3(-0.0625, -0.5, -0.5);" 

    "void main() {" 
    " vec3 tc = texture(u_tex, v_tex).rgb;" 
    " vec3 yuv = vec3(tc.g, tc.b, tc.r);" 
    " yuv += offset;" 
    " outcol.r = dot(yuv, R_cf);" 
    " outcol.g = dot(yuv, G_cf);" 
    " outcol.b = dot(yuv, B_cf);" 
    " outcol.a = 1.0;" 
    "}" 
    ""; 

Проблема в том, OpenGL 2.x не поддерживает шейдеры версии 150. Кто-нибудь есть идеи, как я бы назад-конвертировать шейдеры в 2.x?

ответ

1

shader.vsh Файл

uniform mat4 u_pm; 
uniform mat4 u_mm; 
attribute vec4 a_pos; 
attribute vec2 v_tex; 

varying vec2 fragmentTextureCoordinates; 

void main() { 
    gl_Position = u_pm * u_mm * a_pos; 
    fragmentTextureCoordinates = v_tex; 
} 

shader.fsh Файл

uniform sampler2D u_tex; 
varying vec2 fragmentTextureCoordinates; 

const vec3 R_cf = vec3(1.164383, 0.000000, 1.596027); 
const vec3 G_cf = vec3(1.164383, -0.391762, -0.812968); 
const vec3 B_cf = vec3(1.164383, 2.017232, 0.000000); 
const vec3 offset = vec3(-0.0625, -0.5, -0.5); 

void main() { 
    vec3 tc = texture2D(u_tex, fragmentTextureCoordinates).rgb; 
    vec3 yuv = vec3(tc.g, tc.b, tc.r); 
    yuv += offset; 
    gl_FragColor.r = dot(yuv, R_cf); 
    gl_FragColor.g = dot(yuv, G_cf); 
    gl_FragColor.b = dot(yuv, B_cf); 
    gl_FragColor.a = 1.0; 
} 

Будет ли это работать? Возможно, вам придется адаптировать переменные, которые вы передаете своей программе/технике/шейдерам.

Смежные вопросы