网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
02月19日漏签0天
ege吧 关注:1,275贴子:5,593
  • 看贴

  • 图片

  • 吧主推荐

  • 游戏

  • 4回复贴,共1页
<<返回ege吧
>0< 加载中...

把ege的PIMAGE对象读到opengl的纹理上

  • 只看楼主
  • 收藏

  • 回复
  • kmmai
  • 打酱油的
    5
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
废话不多说,举个小例子,上代码


  • kmmai
  • 打酱油的
    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的颜色数据进行调整


2026-02-19 23:41:11
广告
不感兴趣
开通SVIP免广告
  • kmmai
  • 打酱油的
    5
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
例子视频:https://tieba.baidu.com/p/6900492593


  • kmmai
  • 打酱油的
    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++;
}


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 4回复贴,共1页
<<返回ege吧
分享到:
©2026 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示