小编Zai*_*yed的帖子

注入帧缓冲区

从我年轻的时候起,我一直在"黑客攻击"我最喜欢的游戏之一,并且我已经设法能够拦截OpenGL调用并使用opengl32.dll包装器注入C++代码.我已经能够为此提出一些很酷的用途,但我目前的目标是在这款旧游戏中实现后处理glsl着色器,使其看起来更现代.该游戏最初是在90年代后期发布的,因此它对OpenGL及其渲染代码的使用是有限/原始/过时的.

我已经能够通过注入代码来初始化和使用glsl着色器程序来成功生成顶点和片段着色器,但我的问题在于生成一个帧缓冲区/将我的场景渲染到纹理以作为采样器发送到我的片段着色器.据我所知,我生产的纹理通常都是黑色的.

很难找到与我正在做的事情相关的资源并检查原始的opengl调用(我一直在尝试通过读取单帧游戏玩法的opengl跟踪来确定插入代码的位置),所以我没有去过能够绕过我做错的事情.

我已经尝试将代码放在很多地方,但是目前,我在游戏调用后绑定了framebuffer,wglSwapBuffers()并且在下一个glFlush()调用之前我立即解除绑定,但是我不确定是否有多个视口设置,或矩阵运算,或在这些时间之间创建的任何其他东西都会以某种方式搞乱帧缓冲.

这是初始化帧缓冲区的代码:

void initFB()
{
  /* Texture */
  glActiveTexture(GL_TEXTURE0);
  glGenTextures(1, &fbo_texture);
  glBindTexture(GL_TEXTURE_2D, fbo_texture);

  glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 1920, 1080, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);

  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);

  glBindTexture(GL_TEXTURE_2D, 0);

    /* Depth buffer */
  glGenRenderbuffers(1, &fbo_depth);
  glBindRenderbuffer(GL_RENDERBUFFER, fbo_depth);
  glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT16, 1920, 1080);  
  glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, fbo_depth);
  glBindRenderbuffer(GL_RENDERBUFFER, 0);

  /* Framebuffer to link everything together */
  glGenFramebuffers(1, &fbo);
  glBindFramebuffer(GL_FRAMEBUFFER, fbo);

  glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, fbo_texture, 0);
  glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, …
Run Code Online (Sandbox Code Playgroud)

opengl framebuffer code-injection

12
推荐指数
1
解决办法
2220
查看次数

这个类声明是什么意思?

在头文件中遇到了一个我不确定如何解释的片段:

...
private:
    class Ellipsoid * ellipse;
Run Code Online (Sandbox Code Playgroud)

它稍后在cpp中初始化:

ellipse = (Ellipsoid *) something->GetEllipse();
Run Code Online (Sandbox Code Playgroud)

这个数据成员的class关键字让我失望.这是一个指向继承自Ellipsoid的类/类型的指针吗?因此,"椭圆"是否被视为对类型的引用?

c++ types class header-files

1
推荐指数
1
解决办法
96
查看次数

标签 统计

c++ ×1

class ×1

code-injection ×1

framebuffer ×1

header-files ×1

opengl ×1

types ×1