Когда я инкапсулирую свой код OpenGL (GLEW) в класс, он не работает, но когда я использую необработанные макросы в основC++

Программы на C++. Форум разработчиков
Anonymous
 Когда я инкапсулирую свой код OpenGL (GLEW) в класс, он не работает, но когда я использую необработанные макросы в основ

Сообщение Anonymous »

Это то, что было сказано ранее. Если вы попробуете вставить код из класса в основную функцию, код сразу же начнет работать так, как задумано, то есть отображать прямоугольник (или, в данном случае, квадрат) на экране.
MRE:
тестовый класс:
class Test
{

public:
Test();
~Test();
void Init();
void Bind();
void Unbind();
void Draw();

private:
unsigned int vb, va, ib, s;
glm::mat4 dim = glm::ortho(0.0f, 1920.0f, 0.0f, 1080.0f);
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);
glUniform4f(glGetUniformLocation(s, "u_Color"), 1.0f, 1.0f, 1.0f, 1.0f);
glUniformMatrix4fv(glGetUniformLocation(s, "u_MVP"), 1, false, &dim[0][0]);
}

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

Вернуться в «C++»