Когда я инкапсулирую свой код 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;
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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Когда я инкапсулирую свой код OpenGL (GLEW) в класс, он не работает, но когда я использую необработанные макросы в основ
    Anonymous » » в форуме C++
    0 Ответы
    20 Просмотры
    Последнее сообщение Anonymous
  • Могут ли GLFW и Qt использовать один и тот же контекст OpenGL и использовать функции GLEW для рендеринга на обеих поверх
    Гость » » в форуме C++
    0 Ответы
    30 Просмотры
    Последнее сообщение Гость
  • OpenGL — связывание библиотек и библиотек glew и перенасыщения с g++
    Anonymous » » в форуме C++
    0 Ответы
    40 Просмотры
    Последнее сообщение Anonymous
  • Как связать GLEW (OpenGL) на Mac M1 в коде vs
    Anonymous » » в форуме C++
    0 Ответы
    24 Просмотры
    Последнее сообщение Anonymous
  • Как связать GLEW (OpenGL) на Mac M1 в коде vs
    Anonymous » » в форуме C++
    0 Ответы
    15 Просмотры
    Последнее сообщение Anonymous

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