小编Nic*_*tum的帖子

OpenGL 16 位模板缓冲区?

我正在尝试创建具有 4 个颜色附件、一个 16 位深度缓冲区和一个 16 位模板缓冲区的帧缓冲区。我需要 16 位用于模板缓冲区,因为我在其中存储对象 ID 以用于对象拾取,并且我有超过 255 个对象。我创建了两个渲染缓冲区:

glBindRenderbuffer(GL_RENDERBUFFER, mID);
glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT16, width, height);

glBindRenderbuffer(GL_RENDERBUFFER, mID2);
glRenderbufferStorage(GL_RENDERBUFFER, GL_STENCIL_INDEX16, width, height);
glBindRenderbuffer(GL_RENDERBUFFER, 0);
Run Code Online (Sandbox Code Playgroud)

我要求 SDL 给我 16 位模板:

SDL_GL_SetAttribute(SDL_GL_STENCIL_SIZE, 16);
Run Code Online (Sandbox Code Playgroud)

但是当我将模板渲染缓冲区绑定到帧缓冲区时,我收到帧缓冲区不完整错误。我知道 wiki 指出规范不需要 GL_STENCIL_INDEX16 。是否不可能创建 16 个模板缓冲区?我可以将对象 ID 整数编码为 8 位值吗?

c++ opengl

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

字符串替换C++中的空格中断

如果我在执行下面的代码时输入"我们将在学校玩得开心",它似乎在第一个单词后打破并且仅打印"W3".有谁知道我做错了什么?

#include <iostream>
#include <algorithm>
#include <string>
using namespace std;

int main()
  {
  string s;
  cout << "Invoer: ";
  cin >> s;

  replace( s.begin(), s.end(), 'e', '3' );
  replace( s.begin(), s.end(), 'o', '0' );
  replace( s.begin(), s.end(), 't', '7' );
  replace( s.begin(), s.end(), 'l', '1' );
  transform( s.begin(), s.end(), s.begin(), ::toupper);

  cout << s << endl;

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

c++

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

返回派生的模板化类作为基类指针

class Base {
public:
    template<typename T>
    static Base* construct() {
        return new Derived<T>();
    }
};

template<typename T>
class Derived : public Base {
public:
    Derived() {}
};
Run Code Online (Sandbox Code Playgroud)

该代码生成编译错误(VS Studio 2017):

syntax error: unexpected token 'identifier', expected 'type specifier'
Run Code Online (Sandbox Code Playgroud)

这是无效的C ++吗?这种模式不可能吗?

c++

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

标签 统计

c++ ×3

opengl ×1