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

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. 案例代码下载地址:

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. 运行效果:

这里写图片描述

阅读更多

扫码向博主提问

xiaxl

android、opengl es相关
  • 擅长领域:
  • android
  • opengl es
去开通我的Chat快问
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/aiwusheng/article/details/72621943
文章标签: opengl es
个人分类: OpenGL ES
上一篇android中批量处理dimens.xml的工具
下一篇Opengl ES中YUV420转RGB
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭