133 glGetIntegerv(GL_FRAMEBUFFER_BINDING, &lastFBO);
135 glGetIntegerv(GL_TEXTURE_BINDING_2D, &lastTex);
139 static std::string vertexShSrc =
141 " precision highp float;\n"
144 "layout (location = 0) in vec2 aPos;\n"
145 "layout (location = 1) in vec2 aTexCoords;\n"
147 "out vec2 TexCoords;\n"
151 " gl_Position = vec4(aPos.x, aPos.y, 0.0, 1.0);\n"
152 " TexCoords = aTexCoords;\n"
155 static std::string fragShSrc =
156 "#include extension\n"
158 " precision highp float;\n"
161 "out vec4 FragColor;\n"
163 "in vec2 TexCoords;\n"
165 "#include sampler texture0;\n"
169 " //ATTENTION: order is changed to bgr\n"
170 " FragColor = texture(texture0, vec2(TexCoords.x, TexCoords.y)).bgra;\n"
175 _prog = glCreateProgram();
176 glAttachShader(
_prog, vertexSh);
177 glAttachShader(
_prog, fragSh);
178 glLinkProgram(
_prog);
179 glDeleteShader(vertexSh);
180 glDeleteShader(fragSh);
188 1.0f, 1.0f, 1.0f, 1.0f,
189 1.0f, -1.0f, 1.0f, 0.0f,
190 -1.0f, -1.0f, 0.0f, 0.0f,
191 -1.0f, 1.0f, 0.0f, 1.0f
194 unsigned int indices[] = {
200 glGenVertexArrays(1, &
_VAO);
201 glGenBuffers(1, &
_VBO);
202 glGenBuffers(1, &
_EBO);
204 glBindVertexArray(
_VAO);
206 glBindBuffer(GL_ARRAY_BUFFER,
_VBO);
207 glBufferData(GL_ARRAY_BUFFER,
sizeof(vertices), vertices, GL_STATIC_DRAW);
209 glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,
_EBO);
210 glBufferData(GL_ELEMENT_ARRAY_BUFFER,
sizeof(indices), indices, GL_STATIC_DRAW);
213 glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 4 *
sizeof(
float), (
void*)0);
214 glEnableVertexAttribArray(0);
216 glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, 4 *
sizeof(
float), (
void*)(2 *
sizeof(
float)));
217 glEnableVertexAttribArray(1);
219 glBindBuffer(GL_ARRAY_BUFFER, 0);
220 glBindVertexArray(0);
222 glGenFramebuffers(1, &
_fbo);
223 glBindFramebuffer(GL_FRAMEBUFFER,
_fbo);
233 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
234 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
237 glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D,
_targetTex, 0);
241 GLenum status = glCheckFramebufferStatus(GL_FRAMEBUFFER);
242 if (status != GL_FRAMEBUFFER_COMPLETE)
243 Utils::log(
"SENSGLTextureReader",
"failed to make complete framebuffer object %x", status);
247 glBindFramebuffer(GL_FRAMEBUFFER, lastFBO);
248 glBindTexture(GL_TEXTURE_2D, lastTex);
GLuint buildShaderFromSource(std::string source, GLenum shaderType, bool isGlExternalTexture)