我正在尝试创建具有 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 位值吗?
如果我在执行下面的代码时输入"我们将在学校玩得开心",它似乎在第一个单词后打破并且仅打印"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) 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 ++吗?这种模式不可能吗?