gpt4 book ai didi

安卓 OGLES 2 : shaders pointer for color

转载 作者:行者123 更新时间:2023-11-28 08:09:25 26 4
gpt4 key购买 nike

我在将程序升级到 OGLES 2 着色器时遇到问题。

这是数据结构:

namespace packt {
class GraphicsService {
public:
...
struct ESMatrix{ GLfloat m[4][4]; };

typedef struct
{ // Handle to a program object
GLuint programObject;
// Attribute locations
GLint positionLoc;
// Uniform locations
GLint mvpLoc;
// Vertex data
GLfloat *vertices;
GLuint *indices;
int numIndices;
// Rotation angle
GLfloat angle;
// MVP matrix
ESMatrix mvpMatrix;
} UserData;
...
}
}

在 android_main 中设置上下文:

packt::GraphicsService lGraphicsService(pApplication,&lTimeService);
packt::Context lContext = { &lGraphicsService, &lTimeService };

但是现在我们不再使用不属于 OGLES 2 的 glColor4f,而是尝试用着色器替换该命令。以下是如何进入设置方法:

void GraphicsService::setup() {
glEnable(GL_TEXTURE_2D);
GLbyte vShaderStr[] =
"uniform mat4 u_mvpMatrix; \n"
"attribute vec4 a_position; \n"
"void main() \n"
"{ \n"
" gl_Position = u_mvpMatrix * a_position; \n"
"} \n";

GLbyte fShaderStr[] =
"precision mediump float; \n"
"void main() \n"
"{ \n"
" gl_FragColor = vec4( 1.0, 0.0, 0.0, 1.0 ); \n"
"} \n";
// Load the shaders and get a linked program object

// replaced :: //glColor4f(1.0f, 1.0f, 1.0f, 1.0f);
UserData *userData = mContext->userData;
userData->programObject = esLoadProgram (vShaderStr, fShaderStr);
glDisable(GL_DEPTH_TEST);
}

给出以下编译器信息:

error: UserData *userData = mContext->userData;
- 'void*' is not a pointer-to-object type
error: userData->programObject = esLoadProgram (vShaderStr, fShaderStr);
- invalid conversion from 'GLbyte*' to 'const char*'
- initializing argument 1 of 'GLuint esLoadProgram(const char*, const char*)'
- initializing argument 2 of 'GLuint esLoadProgram(const char*, const char*)'

有什么解决办法吗?非常感谢所有评论。

最佳答案

1.

mContext 指向的上下文对象包含一个“userData”字段,它可能被声明为一个void*。您正在该字段中存储指向实际 UserData 对象的指针。从 UserData*void* 的转换是隐式工作的,但是要从 void* 获取 UserData*,您需要显式转换:

UserData *userData = reinterpret_cast<UserData*>( mContext->userData );

请注意,reinterpret_cast 具有潜在危险;当你使用它时,首先确保你的 void* 真的来自 UserData*,否则 坏事会发生

2.

错误消息说明了一切:esLoadProgram 需要类型为 const char* 的参数,而您正在传递类型为 GLbyte* 的参数。适本地声明您的 vShaderStrfShaderStr,如:

const char *vShaderStr =
"uniform ...

关于安卓 OGLES 2 : shaders pointer for color,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9498120/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com