各位好,我最近在尝试使用opengl来显示YUV420数据,遇到了一些问题,希望各位帮忙解答。1. 关于流程,我想是在Java层写Renderer类,然后在Renderer的onDrawFrame()/onSurfaceChanged()/onSurfaceCreated()中分别去调用native层的代码,native负责调用所有的opengles接口,在opengl的shader中进行YUV->RGB的转换,然后通过texture渲染出来,不知道这样的思路是否正确?2. 在使用shader时,我在c代码中是这样写的:
GLuint loadShader(GLenum shaderType, const char *pSource) {
GLuint shader;
GLint compiled; shader = glCreateShader(shaderType);
LOGD("JNI -> new Shader = %1$d", shader);
if (shader) {
glShaderSource(shader, 1, &pSource, NULL);
glCompileShader(shader);
glGetShaderiv(shader, GL_COMPILE_STATUS, &compiled);
LOGD("JNI -> compile = %1$d", compiled);
if (!compiled) {
........
我新建了2个shader(GL_VERTEX_SHADER和GL_FRAGMENT_SHADER),但是通过打log发现,2个shader的值是一样的(都是43),两个compiled的值也是一样的(是1393950951这种长数字),我感觉这样是不对的,请问这样对吗,为什么?3. 各位有没有做过这方面的例子,或有成熟的、好的思路,请不吝赐教,十分感谢!AndroidOpenGL ESYUVndk