Это то, что было сказано ранее. Если вы попробуете вставить код из класса в основную функцию, код сразу же начнет работать так, как задумано, то есть отображать прямоугольник (или, в данном случае, квадрат) на экране.
MRE:
тестовый класс:
class Test
{
public:
Test();
~Test();
void Init();
void Bind();
void Unbind();
void Draw();
private:
unsigned int vb, va, ib, s;
float vba[8];
unsigned int iba[6];
};
Test::Test()
{
vba[0] = 0.0f;
vba[1] = 0.0f;
vba[2] = 0.0f;
vba[3] = 1000.0f;
vba[4] = 1000.0f;
vba[5] = 0.0f;
vba[6] = 1000.0f;
vba[7] = 1000.0f;
iba[0] = 0;
iba[1] = 1;
iba[2] = 2;
iba[3] = 1;
iba[4] = 2;
iba[5] = 3;
}
Test::~Test()
{
glDeleteVertexArrays(1, &va);
glDeleteBuffers(1, &vb);
glDeleteBuffers(1, &ib);
glDeleteProgram(s);
}
void Test::Init()
{
glGenVertexArrays(1, &vb);
glBindVertexArray(vb);
glGenBuffers(1, &vb);
glBindBuffer(GL_ARRAY_BUFFER, vb);
glBufferData(GL_ARRAY_BUFFER, 8 * sizeof(float), vba, GL_STREAM_DRAW);
glEnableVertexAttribArray(0);
glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 2 * sizeof(float), 0);
glBindBuffer(GL_ARRAY_BUFFER, 0);
glGenBuffers(1, &ib);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ib);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, 6 * sizeof(unsigned int), iba, GL_STREAM_DRAW);
s = GetShaderProgram("shaders/paddleshader/PaddleVertex.Shader", "shaders/paddleshader/PaddleFragment.Shader");
glUseProgram(s);
}
void Test::Bind()
{
glBindVertexArray(vb);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ib);
glUseProgram(s);
}
void Test::Unbind()
{
glBindVertexArray(0);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
glUseProgram(0);
}
void Test::Draw()
{
Bind();
glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, (const void*)iba);
Unbind();
}
функция компиляции шейдера (игнорировать GLCall):
std::string GetShaderString(const std::string& filepath) {
std::ifstream stream(filepath);
std::string line;
std::stringstream shaderstring;
while (getline(stream, line)) {
shaderstring
Подробнее здесь: https://stackoverflow.com/questions/790 ... but-when-i
Когда я инкапсулирую свой код OpenGL (GLEW) в класс, он не работает, но когда я использую необработанные макросы в основ ⇐ C++
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение