Android에서 OpenGL ES 3.0 코드로 OpenGL 코드를 이식하려고합니다. 그러나 "glTexImage1D"및 "GL_TEXTURE_1D"함수는 OpenGL ES 2.0 사양에 정의되어 있지 않습니다. 그것에 대한 대안이 있습니까?OpenGL es 3.0에서 glTexImage1D를위한 대체물?
내 Android 휴대 전화는 16 개의 텍스처 단위를 지원하며 개인용 컴퓨터에서 GLSL 셰이더를 구현하려면 1D 텍스처를 통해 루프 업해야합니다.
따라서 가장 가능한 방법은 "glTexImage2D"및 "GL_TEXTURE_2D"로 대체하는 것입니다.
#include <GL/glut.h>
GLuint tex = 0;
void init()
{
glGenTextures(1, &tex);
glBindTexture(GL_TEXTURE_1D, tex);
glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
//
unsigned char buf[32 * 4];
for (size_t i = 0; i < sizeof(buf); i += 4)
{
buf[i + 0] = rand() % 255;
buf[i + 1] = rand() % 255;
buf[i + 2] = rand() % 255;
buf[i + 3] = 255;
}
glTexImage1D(GL_TEXTURE_1D, 0, 4, sizeof(buf)/4, 0, GL_RGBA, GL_UNSIGNED_BYTE, buf);
}
void display()
{
glClear(GL_COLOR_BUFFER_BIT);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(-2, 2, -2, 2, -1, 1);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glEnable(GL_TEXTURE_1D);
glBindTexture(GL_TEXTURE_1D, tex);
glColor3ub(255, 255, 255);
glLineWidth(10);
glBegin(GL_LINES);
glTexCoord1i(0);
glVertex2i(-1, -1);
glTexCoord1i(1);
glVertex2i(1, 1);
glEnd();
glutSwapBuffers();
}
int main(int argc, char **argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE);
glutInitWindowSize(640, 480);
glutCreateWindow("GLUT");
glutDisplayFunc(display);
init();
glutMainLoop();
return 0;
}