level 5
初始化ege...
初始化opengl...
设置opengl....
首先,创建一个/一些纹理对象
GLuint texture[1];
glGenTextures(1, texture);
绑定纹理对象
glBindTexture(GL_TEXTURE_2D, texture[0]);
使用getbuffer获取PIMAGE对象的缓存
unsigned* buffer = getbuffer(img);
写入数据
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, w, h, 0, GL_RGBA, GL_UNSIGNED_BYTE, buffer);
注意!!!
按上面这种写发读的数据是这样的:ABGR(各8位)
所以我们要自己对ege的颜色数据进行调整
2020年08月23日 07点08分
2
level 5
颜色数据调整,现场写了个函数
void fun(void* buffer, int w, int h) {
unsigned *p = (unsigned*)buffer, *ep = (unsigned*)buffer + w * h;
if (w * h > 16) {
switch ((w * h) % 8)
{
do {
default:
(*p = (*p >> 16) & 0xff | ((*p & 0xff) << 16) | (*p & ~((unsigned)0xff | (unsigned)(0xff << 16)))) , p++;
case 7:
(*p = (*p >> 16) & 0xff | ((*p & 0xff) << 16) | (*p & ~((unsigned)0xff | (unsigned)(0xff << 16)))) , p++;
case 6:
(*p = (*p >> 16) & 0xff | ((*p & 0xff) << 16) | (*p & ~((unsigned)0xff | (unsigned)(0xff << 16)))) , p++;
case 5:
(*p = (*p >> 16) & 0xff | ((*p & 0xff) << 16) | (*p & ~((unsigned)0xff | (unsigned)(0xff << 16)))) , p++;
case 4:
(*p = (*p >> 16) & 0xff | ((*p & 0xff) << 16) | (*p & ~((unsigned)0xff | (unsigned)(0xff << 16)))) , p++;
case 3:
(*p = (*p >> 16) & 0xff | ((*p & 0xff) << 16) | (*p & ~((unsigned)0xff | (unsigned)(0xff << 16)))) , p++;
case 2:
(*p = (*p >> 16) & 0xff | ((*p & 0xff) << 16) | (*p & ~((unsigned)0xff | (unsigned)(0xff << 16)))) , p++;
case 1:
(*p = (*p >> 16) & 0xff | ((*p & 0xff) << 16) | (*p & ~((unsigned)0xff | (unsigned)(0xff << 16)))) , p++;
} while (p != ep);
}
}
while (p != ep)
(*p = (*p >> 16) & 0xff | ((*p & 0xff) << 16) | (*p & ~((unsigned)0xff | (unsigned)(0xff << 16)))), p++;
}
2020年08月23日 07点08分
4
啊这,突然发现个小问题,while后面的}后面加个return
2020年08月23日 08点08分