win7下VS2013搭建opengl es 2.0的C++开发环境

来源:互联网 发布:正规java培训班 编辑:程序博客网 时间:2024/05/20 17:10

win7下VS2013搭建opengl es 2.0的C++开发环境

@(预发布)[Opengl es]

文章参考:
http://codingnow.cn/opengles/1501.html

1. 下载AMD的OpenGL ES2.0的模拟器,下载地址:

http://www.opengles-book.com/ESEmulator.2009-04-28-v1.4.APRIL_2009_RELEASE.msi

2. 拷贝文件:

  • (1)、将 C:\Program Files (x86)\AMD\OpenGL ES 2.0 Emulator v1.4\bin 文件下的 libEGL.dll 和 libGLESv2.dll 文件拷贝到 C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin 目录下
  • (2)、将 C:\Program Files (x86)\AMD\OpenGL ES 2.0 Emulator v1.4\lib 文件下的 libEGL.lib 和 libGLESv2.lib 文件拷贝到 C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\lib 目录下

3. 案例代码下载地址:

  • (1)、案例代码地址: http://download.csdn.net/detail/aiwusheng/9269511
  • (2)、用VS2013开”ES_001_Triangle\Chapter_2\Hello_Triangle\Hello_Triangle.sln”文件
    这里写图片描述

4. 代码实现:

// stdio#include <stdio.h>#include <stdlib.h>#include "esUtil.h"GLuint programObject;/*** 加载shaser*/GLuint LoadShader(GLenum shaderType, const char* pSource) {    // 创建shader程序    GLuint shader = glCreateShader(shaderType);    if (shader) {        glShaderSource(shader, 1, &pSource, NULL);        glCompileShader(shader);        GLint compiled = 0;        glGetShaderiv(shader, GL_COMPILE_STATUS, &compiled);        if (!compiled) {            GLint infoLen = 0;            glGetShaderiv(shader, GL_INFO_LOG_LENGTH, &infoLen);            if (infoLen) {                char* buf = (char*)malloc(infoLen);                if (buf) {                    glGetShaderInfoLog(shader, infoLen, NULL, buf);                    printf("Could not compile shader %d:\n%s\n", shaderType, buf);                    free(buf);                }                glDeleteShader(shader);                shader = 0;            }        }    }    return shader;}/*** 编译shader* @param pVertexSource 顶点着色器* @param pFragmentSource 片元着色器*/GLuint CreateProgram(const char* pVertexSource, const char* pFragmentSource) {    // 加载顶点着色器    GLuint vertexShader = LoadShader(GL_VERTEX_SHADER, pVertexSource);    if (!vertexShader) {        return 0;    }    // 加载片元着色器    GLuint pixelShader = LoadShader(GL_FRAGMENT_SHADER, pFragmentSource);    if (!pixelShader) {        return 0;    }    GLuint program = glCreateProgram();    if (program) {        // 连接顶点shader        glAttachShader(program, vertexShader);        // 链接片元shader        glAttachShader(program, pixelShader);        glLinkProgram(program);        GLint linkStatus = GL_FALSE;        glGetProgramiv(program, GL_LINK_STATUS, &linkStatus);        if (linkStatus != GL_TRUE) {            GLint bufLength = 0;            glGetProgramiv(program, GL_INFO_LOG_LENGTH, &bufLength);            if (bufLength) {                char* buf = (char*)malloc(bufLength);                if (buf) {                    glGetProgramInfoLog(program, bufLength, NULL, buf);                    printf("Could not link program:\n%s\n", buf);                    free(buf);                }            }            glDeleteProgram(program);            program = 0;        }    }    return program;}/**初始化*/int Init(){    // 顶点shader    char vShaderStr[] =        "attribute vec4 vPosition;    \n"        "void main()                  \n"        "{                            \n"        "   gl_Position = vPosition;  \n"        "}                            \n";    // 片元shader    char fShaderStr[] =        "precision mediump float;\n"\        "void main()                                  \n"        "{                                            \n"        "  gl_FragColor = vec4 ( 1.0, 0.0, 0.0, 1.0 );\n"        "}                                            \n";    // 创建着色器程序    programObject = CreateProgram(vShaderStr, fShaderStr);    // 视口大小    glViewport(0, 0, 800, 600);    return TRUE;}/** 绘制方法*/void Draw(ESContext *esContext){    // 顶点位置数据    GLfloat vVertices[] = { 0.0f, 0.5f, 0.0f,        -0.5f, -0.5f, 0.0f,        0.5f, -0.5f, 0.0f };    // 清理颜色缓存和深度缓存    glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT);    // 清屏颜色    glClearColor(1.0f, 1.0f, 1.0f, 1.0f);    // 设置使用的着色器    glUseProgram(programObject);    // 加载顶点数组    glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, vVertices);    // 启用顶点数组    glEnableVertexAttribArray(0);    //以三角形的方式进行绘制    glDrawArrays(GL_TRIANGLES, 0, 3);    //    eglSwapBuffers(esContext->eglDisplay, esContext->eglSurface);}/*** Main函数*/int main(int argc, char *argv[]){    //    ESContext esContext;    //UserData  userData;    // 初始化 esUtil中的方法    esInitContext(&esContext);    //esContext.userData = &userData;    // window相关,创建窗口的大小    esCreateWindow(&esContext, "Hello Triangle", 800, 600, ES_WINDOW_RGB);    // 进行数据的初始化    if (!Init())        return 0;    // 循环调用draw方法    esRegisterDrawFunc(&esContext, Draw);    // MainLoop    esMainLoop(&esContext);}

5. 运行效果:

这里写图片描述

原创粉丝点击