so I have this vertex shader which does a debayering process on a video.
The problem is that I’m using OpenGL ES #version 100.
the vertex without any modification (for OpenGL ) :
/** (w,h,1/w,1/h) */
uniform vec4 sourceSize;
/** Pixel position of the first red pixel in the Bayer pattern. [{0,1}, {0, 1}]*/
uniform vec2 firstRed;
/** .xy = Pixel being sampled in the fragment shader on the range [0, 1]
.zw = ...on the range [0, sourceSize], offset by firstRed */
varying vec4 center;
/** center.x + (-2/w, -1/w, 1/w, 2/w); These are the x-positions of the adjacent pixels.*/
varying vec4 xCoord;
/** center.y + (-2/h, -1/h, 1/h, 2/h); These are the y-positions of the adjacent pixels.*/
varying vec4 yCoord;
void main(void) {
center.xy = gl_MultiTexCoord0.xy;
center.zw = gl_MultiTexCoord0.xy * sourceSize.xy + firstRed;
vec2 invSize = sourceSize.zw;
xCoord = center.x + vec4(-2.0 * invSize.x, -invSize.x, invSize.x, 2.0 * invSize.x);
yCoord = center.y + vec4(-2.0 * invSize.y, -invSize.y, invSize.y, 2.0 * invSize.y);
gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
}
And I managed to port this to OpenGL ES which does not implement gl_MultiTexCoord0, gl_ModelViewProjectionMatrix and gl_Vertex
#extension GL_ARB_explicit_attrib_location : require
const float a = 1/1088;
const float b = 1/870;
uniform mat4 projMat;
uniform mat4 viewMat;
uniform mat4 modelMat;
layout (location = 1) in vec3 position;
const vec4 sourceSize = vec4(1088.0,870.0,a,b);
const vec2 firstRed= vec2(1.0,0.0);
varying vec4 center;
varying vec4 xCoord;
varying vec4 yCoord;
vec4 tmp;
void main(void)
{
center.xy = tmp.xy;
center.zw = tmp.xy * sourceSize.xy + firstRed;
vec2 invSize = sourceSize.zw;
xCoord = center.x + vec4(-2.0 * invSize.x, -invSize.x, invSize.x, 2.0 * invSize.x);
yCoord = center.y + vec4(-2.0 * invSize.y, -invSize.y, invSize.y, 2.0 * invSize.y);
gl_Position = projMat * viewMat * modelMat * vec4(position, 1.0);
}
The Problem is that I get a black screen !! What I’ve done wrong here ?