织梦CMS - 轻松建站从此开始!

罗索实验室

当前位置: 主页 > 音视频技术 > 音视频播放 >

OpenGLES 显示 yuv

落鹤生 发布于 1970-01-01 08:00 点击:次 
作者说:我是一个灰常干脆的人,一点也不罗索,所以,直接上代码。XDXD //OpenGLES2.0code #includeShader.vert #includeShader.frag #includejni.h #includeandroid/log.h #includeGLES2/gl2.h #includeGLES2/gl2ext.h #includestdio.h #includestdlib.h #includemath
TAG:

作者说:我是一个灰常干脆的人,一点也不罗索,所以,直接上代码。XDXD

    class="dp-cpp">
  1. // OpenGL ES 2.0 code  
  2.  
  3. #include "Shader.vert" 
  4. #include "Shader.frag" 
  5.  
  6. #include <jni.h> 
  7. #include <android/log.h> 
  8.  
  9. #include <GLES2/gl2.h> 
  10. #include <GLES2/gl2ext.h> 
  11.  
  12. #include <stdio.h> 
  13. #include <stdlib.h> 
  14. #include <math.h> 
  15.  
  16. enum { 
  17.     ATTRIB_VERTEX, 
  18.     ATTRIB_TEXTURE, 
  19. }; 
  20.  
  21. static GLuint g_texYId; 
  22. static GLuint g_texUId; 
  23. static GLuint g_texVId; 
  24. static GLuint simpleProgram; 
  25.  
  26. static char *              g_buffer = NULL; 
  27. static int                 g_width = 0; 
  28. static int                 g_height = 0; 
  29.  
  30.  
  31. static void checkGlError(const char* op)  
  32.     GLint error; 
  33.     for (error = glGetError(); error; error = glGetError())  
  34.     { 
  35.         log("error::after %s() glError (0x%x)\n", op, error); 
  36.     } 
  37.  
  38. static GLuint bindTexture(GLuint texture, const char *buffer, GLuint w , GLuint h) 
  39. //  GLuint texture; 
  40. //  glGenTextures ( 1, &texture ); 
  41.     checkGlError("glGenTextures"); 
  42.     glBindTexture ( GL_TEXTURE_2D, texture ); 
  43.     checkGlError("glBindTexture"); 
  44.     glTexImage2D ( GL_TEXTURE_2D, 0, GL_LUMINANCE
  45. , w, h, 0, GL_LUMINANCE, GL_UNSIGNED_BYTE, buffer); 
  46.     checkGlError("glTexImage2D"); 
  47.     glTexParameteri ( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR ); 
  48.     checkGlError("glTexParameteri"); 
  49.     glTexParameteri ( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR ); 
  50.     checkGlError("glTexParameteri"); 
  51.     glTexParameteri ( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE ); 
  52.     checkGlError("glTexParameteri"); 
  53.     glTexParameteri ( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE ); 
  54.     checkGlError("glTexParameteri"); 
  55.     //glBindTexture(GL_TEXTURE_2D, 0); 
  56.  
  57.     return texture; 
  58.  
  59. static void renderFrame() 
  60. #if 0 
  61.     // Galaxy Nexus 4.2.2 
  62.     static GLfloat squareVertices[] = { 
  63.         -1.0f, -1.0f, 
  64.         1.0f, -1.0f, 
  65.         -1.0f,  1.0f, 
  66.         1.0f,  1.0f, 
  67.     }; 
  68.  
  69.     static GLfloat coordVertices[] = { 
  70.         0.0f, 1.0f, 
  71.         1.0f, 1.0f, 
  72.         0.0f,  0.0f, 
  73.         1.0f,  0.0f, 
  74.     }; 
  75. #else 
  76.  // HUAWEIG510-0010 4.1.1 
  77.     static GLfloat squareVertices[] = { 
  78.         0.0f, 0.0f, 
  79.         1.0f, 0.0f, 
  80.         0.0f,  1.0f, 
  81.         1.0f,  1.0f, 
  82.     }; 
  83.  
  84.     static GLfloat coordVertices[] = { 
  85.             -1.0f, 1.0f, 
  86.             1.0f, 1.0f, 
  87.             -1.0f,  -1.0f, 
  88.             1.0f,  -1.0f, 
  89.     }; 
  90. #endif 
  91.  
  92.     glClearColor(0.5f, 0.5f, 0.5f, 1); 
  93.     checkGlError("glClearColor"); 
  94.     glClear(GL_COLOR_BUFFER_BIT); 
  95.     checkGlError("glClear"); 
  96.     //PRINTF("setsampler %d %d %d", g_texYId, g_texUId, g_texVId); 
  97.     GLint tex_y = glGetUniformLocation(simpleProgram, "SamplerY"); 
  98.     checkGlError("glGetUniformLocation"); 
  99.     GLint tex_u = glGetUniformLocation(simpleProgram, "SamplerU"); 
  100.     checkGlError("glGetUniformLocation"); 
  101.     GLint tex_v = glGetUniformLocation(simpleProgram, "SamplerV"); 
  102.     checkGlError("glGetUniformLocation"); 
  103.  
  104.  
  105.     glBindAttribLocation(simpleProgram, ATTRIB_VERTEX, "vPosition"); 
  106.     checkGlError("glBindAttribLocation"); 
  107.     glBindAttribLocation(simpleProgram, ATTRIB_TEXTURE, "a_texCoord"); 
  108.     checkGlError("glBindAttribLocation"); 
  109.  
  110.     glVertexAttribPointer(ATTRIB_VERTEX, 2, GL_FLOAT, 0, 0, squareVertices); 
  111.     checkGlError("glVertexAttribPointer"); 
  112.     glEnableVertexAttribArray(ATTRIB_VERTEX); 
  113.     checkGlError("glEnableVertexAttribArray"); 
  114.  
  115.     glVertexAttribPointer(ATTRIB_TEXTURE, 2, GL_FLOAT, 0, 0, coordVertices); 
  116.     checkGlError("glVertexAttribPointer"); 
  117.     glEnableVertexAttribArray(ATTRIB_TEXTURE); 
  118.     checkGlError("glEnableVertexAttribArray"); 
  119.  
  120.     glActiveTexture(GL_TEXTURE0); 
  121.     checkGlError("glActiveTexture"); 
  122.     glBindTexture(GL_TEXTURE_2D, g_texYId); 
  123.     checkGlError("glBindTexture"); 
  124.     glUniform1i(tex_y, 0); 
  125.     checkGlError("glUniform1i"); 
  126.  
  127.     glActiveTexture(GL_TEXTURE1); 
  128.     checkGlError("glActiveTexture"); 
  129.     glBindTexture(GL_TEXTURE_2D, g_texUId); 
  130.     checkGlError("glBindTexture"); 
  131.     glUniform1i(tex_u, 1); 
  132.     checkGlError("glUniform1i"); 
  133.  
  134.     glActiveTexture(GL_TEXTURE2); 
  135.     checkGlError("glActiveTexture"); 
  136.     glBindTexture(GL_TEXTURE_2D, g_texVId); 
  137.     checkGlError("glBindTexture"); 
  138.     glUniform1i(tex_v, 2); 
  139.     checkGlError("glUniform1i"); 
  140.  
  141.     //glEnable(GL_TEXTURE_2D); 
  142.     //checkGlError("glEnable"); 
  143.     glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); 
  144.     checkGlError("glDrawArrays"); 
  145.  
  146. static GLuint buildShader(const char* source, GLenum shaderType)  
  147.     GLuint shaderHandle = glCreateShader(shaderType); 
  148.  
  149.     if (shaderHandle) 
  150.     { 
  151.         glShaderSource(shaderHandle, 1, &source, 0); 
  152.         glCompileShader(shaderHandle); 
  153.  
  154.         GLint compiled = 0; 
  155.         glGetShaderiv(shaderHandle, GL_COMPILE_STATUS, &compiled); 
  156.         if (!compiled) 
  157.         { 
  158.             GLint infoLen = 0; 
  159.             glGetShaderiv(shaderHandle, GL_INFO_LOG_LENGTH, &infoLen); 
  160.             if (infoLen) 
本站文章除注明转载外,均为本站原创或编译欢迎任何形式的转载,但请务必注明出处,尊重他人劳动,同学习共成长。转载请注明:文章转载自:罗索实验室 [http://www.rosoo.net]
本文出处:CSDN博客 作者:wangchenggggdn
顶一下
(3)
60%
踩一下
(2)
40%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
栏目列表
将本文分享到微信
织梦二维码生成器
推荐内容