Hi, i am very newbie in OpenGL and Shaders, i would like to use OpenGl to color conversion, and alpha blending (PowerVr SGX 530), could you help me? I have written this so far, but shaders doesnt work, what i am doing wrong?
#include <stdio.h>
#include <stdlib.h>
#include <../include/EGL/egl.h>
#include <../include/EGL/eglext.h>
#include <../include/GLES2/gl2.h>
#include <../include/GLES2/gl2ext.h>
int main() {
EGLDisplay eglDisplay = 0;
EGLConfig eglConfig = 0;
EGLSurface eglSurface = 0;
EGLContext eglContext = 0;
eglDisplay = eglGetDisplay(EGL_DEFAULT_DISPLAY);
EGLint iMajorVersion, iMinorVersion;
eglInitialize(eglDisplay, &iMajorVersion, &iMinorVersion);
EGLint pi32ConfigAttribs[5];
pi32ConfigAttribs[0] = EGL_SURFACE_TYPE;
pi32ConfigAttribs[1] = EGL_WINDOW_BIT;
pi32ConfigAttribs[2] = EGL_RENDERABLE_TYPE;
pi32ConfigAttribs[3] = EGL_OPENGL_ES2_BIT;
pi32ConfigAttribs[4] = EGL_NONE;
EGLint pi32ContextAttribs[3];
pi32ContextAttribs[0] = EGL_CONTEXT_CLIENT_VERSION;
pi32ContextAttribs[1] = 2;
pi32ContextAttribs[2] = EGL_NONE;
int iConfigs;
eglChooseConfig(eglDisplay, pi32ConfigAttribs, &eglConfig, 1, &iConfigs);
eglSurface = eglCreatePbufferSurface(eglDisplay, eglConfig, NULL);
eglContext = eglCreateContext(eglDisplay, eglConfig, NULL, pi32ContextAttribs);
eglMakeCurrent(eglDisplay, eglSurface, eglSurface, eglContext);
int renderBufferWidth = 1280;
int renderBufferHeight = 720;
// now the FBO
GLuint fbo = 0;
glGenFramebuffers(1, &fbo);
glBindFramebuffer(GL_FRAMEBUFFER, fbo);
GLuint renderBuffer = 0;
glGenRenderbuffers(1, &renderBuffer);
glBindRenderbuffer(GL_RENDERBUFFER, renderBuffer);
glRenderbufferStorage(GL_RENDERBUFFER, GL_RGB565, renderBufferWidth, renderBufferHeight);
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, renderBuffer);
GLenum status = glCheckFramebufferStatus(GL_FRAMEBUFFER);
if (status != GL_FRAMEBUFFER_COMPLETE) {
printf("Problem with OpenGL framebuffer after specifying color render buffer: %x", status);
}
const char* pszFragShader =
"void main (void) { gl_FragColor = vec4(0.0, 0.0, 0.0 , 0.0); }";
GLuint uiFragShader, uiVertShader; // Used to hold the fragment and vertex shader handles
GLuint uiProgramObject; // Used to hold the program handle (made out of the two previous shaders
uiFragShader = glCreateShader(GL_FRAGMENT_SHADER);
glShaderSource(uiFragShader, 1, (const char**) &pszFragShader, NULL);
glCompileShader(uiFragShader);
GLint bShaderCompiled;
glGetShaderiv(uiFragShader, GL_COMPILE_STATUS, &bShaderCompiled);
uiProgramObject = glCreateProgram();
printf("
program object = %d", uiProgramObject);
glAttachShader(uiProgramObject, uiFragShader);
glLinkProgram(uiProgramObject);
GLfloat vVertices[] = { -1.0f, -1.0f, 0.0f, -1.0f, 1.0f, 0.0f, 1.0f, -1.0f, 0.0f, 1.0f, 1.0f,
0.0f };
glViewport(0, 0, renderBufferWidth, renderBufferHeight);
glClearColor(1.0f, 0.0f, 1.0f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT);
glUseProgram(uiProgramObject);
glVertexAttribPointer(0, 4, GL_FLOAT, GL_FALSE, 0, vVertices);
glEnableVertexAttribArray(0);
glDrawArrays(GL_TRIANGLES, 0, 4);
eglSwapBuffers(eglDisplay, eglSurface);
GLuint * data = (GLuint *) malloc(renderBufferWidth * renderBufferHeight * sizeof(GLuint));
glReadPixels(0, 0, renderBufferWidth, renderBufferHeight, GL_RGBA, GL_UNSIGNED_BYTE, data);
printf("
pixel = %u", data[2]);
return 0;
}