2 / 2 / 0
Регистрация: 21.01.2015
Сообщений: 90
1

Вылетает программа с классом текстур

20.04.2017, 22:41. Показов 940. Ответов 1
Метки нет (Все метки)

В общем решил я сделать класс текстур, но приложение почему-то вылетает после glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0);. Пожалуйста помогите
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
//
//main.cpp
//
#include "stdafx.h"
 
// Function prototypes
void key_callback(GLFWwindow* window, int key, int scancode, int action, int mode);
 
// Window dimensions
const GLuint WIDTH = 800, HEIGHT = 600;
 
// The MAIN function, from here we start the application and run the game loop
int main()
{
    // Init GLFW
    glfwInit();
    // Set all the required options for GLFW
    glfwWindowHint(GLFW_RESIZABLE, GL_FALSE);
 
    // Create a GLFWwindow object that we can use for GLFW's functions
    GLFWwindow* window = glfwCreateWindow(WIDTH, HEIGHT, "LearnOpenGL", nullptr, nullptr);
    glfwMakeContextCurrent(window);
 
    // Set the required callback functions
    glfwSetKeyCallback(window, key_callback);
 
    // Set this to true so GLEW knows to use a modern approach to retrieving function pointers and extensions
    glewExperimental = GL_TRUE;
    // Initialize GLEW to setup the OpenGL Function pointers
    glewInit();
 
    // Define the viewport dimensions
    glViewport(0, 0, WIDTH, HEIGHT);
 
 
    // Build and compile our shader program
    Shader ourShader("textures.vs", "textures.frag");
    ourShader.Use();
    // Set up vertex data (and buffer(s)) and attribute pointers
    GLfloat  vertices[] = {
        // Positions          // Colors           // Texture Coords
        0.5f,  0.5f, 0.0f,   1.0f, 0.0f, 0.0f,   1.0f, 1.0f, // Top Right
        0.5f, -0.5f, 0.0f,   0.0f, 1.0f, 0.0f,   1.0f, 0.0f, // Bottom Right
        -0.5f, -0.5f, 0.0f,   0.0f, 0.0f, 1.0f,   0.0f, 0.0f, // Bottom Left
        -0.5f,  0.5f, 0.0f,   1.0f, 1.0f, 0.0f,   0.0f, 1.0f  // Top Left
    };
    GLfloat indices[] = {  // Note that we start from 0!
        0, 1, 3, // First Triangle
        1, 2, 3  // Second Triangle
    };
    
    Texture ourTexture(vertices, sizeof(vertices), indices, sizeof(indices),"container.jpg");
                                
    while (!glfwWindowShouldClose(window))
    {
        // Check if any events have been activiated (key pressed, mouse moved etc.) and call corresponding response functions
        glfwPollEvents();
 
        // Render
        // Clear the colorbuffer
        glClearColor(0.2f, 0.3f, 0.3f, 1.0f);
        glClear(GL_COLOR_BUFFER_BIT);
 
 
        // Bind Texture
        //glBindTexture(GL_TEXTURE_2D, texture);
 
        // Activate shader
        ourShader.Use();
 
        // Draw container
        ourTexture.DrawImage();
 
        // Swap the screen buffers
        glfwSwapBuffers(window);
    }
    // Terminate GLFW, clearing any resources allocated by GLFW.
    glfwTerminate();
    return 0;
}
 
// Is called whenever a key is pressed/released via GLFW
void key_callback(GLFWwindow* window, int key, int scancode, int action, int mode)
{
    if (key == GLFW_KEY_ESCAPE && action == GLFW_PRESS)
        glfwSetWindowShouldClose(window, GL_TRUE);
}
 
//
//texture.h
//
#pragma once
#define GLEW_STATIC
#include <GL/glew.h>
#include <GLFW/glfw3.h>
#include <SOIL.h>
 
class Texture
{
    GLuint VBO, VAO, EBO;
public:
    Texture(GLfloat vertices[],int vertSz, GLfloat indices[], int indSz, const char img[])
    {
        glGenVertexArrays(1, &VAO);
        glGenBuffers(1, &VBO);
        glGenBuffers(1, &EBO);
 
        glBindVertexArray(VAO);
        glBindBuffer(GL_ARRAY_BUFFER, VBO);
        glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, EBO);
        glBufferData(GL_ARRAY_BUFFER, vertSz, vertices, GL_STATIC_DRAW);
        glBufferData(GL_ELEMENT_ARRAY_BUFFER, indSz, indices, GL_STATIC_DRAW);
 
        // Position attribute
        glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 8 * sizeof(GLfloat), (GLvoid*)0);
        glEnableVertexAttribArray(0);
        // Color attribute
        glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 8 * sizeof(GLfloat), (GLvoid*)(3 * sizeof(GLfloat)));
        glEnableVertexAttribArray(1);
        // TexCoord attribute
        glVertexAttribPointer(2, 2, GL_FLOAT, GL_FALSE, 8 * sizeof(GLfloat), (GLvoid*)(6 * sizeof(GLfloat)));
        glEnableVertexAttribArray(2);
 
        glBindVertexArray(0); // Unbind VAO
 
        int width, height;
        unsigned char* image = SOIL_load_image("container.jpg", &width, &height, 0, SOIL_LOAD_RGB);
        glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, image);
        glGenerateMipmap(GL_TEXTURE_2D);
        SOIL_free_image_data(image);
 
        GLuint texture;
        glGenTextures(1, &texture);
        glBindTexture(GL_TEXTURE_2D, texture); // All upcoming GL_TEXTURE_2D operations now have effect on this texture object
                                               // Set the texture wrapping parameters
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);   // Set texture wrapping to GL_REPEAT (usually basic wrapping method)
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
        // Set texture filtering parameters
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
        // Load image, create texture and generate mipmaps
        
    }
    ~Texture()
    {
        glDeleteVertexArrays(1, &VAO);
        glDeleteBuffers(1, &VBO);
        glDeleteBuffers(1, &EBO);
    }
    void DrawImage()
    {
        glBindVertexArray(VAO);
        glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0);
        glBindVertexArray(0);
    }
};
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Вложения
Тип файла: rar Pacman.part01.rar (10.00 Мб, 1 просмотров)
Тип файла: rar Pacman.part02.rar (9.91 Мб, 1 просмотров)
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.04.2017, 22:41
Ответы с готовыми решениями:

Программа не выводит окно при возврате текстур. В чем причина?
Добрый вечер,дорогие друзья! Недавно начал изучать раздел текстур в kivy,но проблема заключается в...

программа с классом
Помогите пожалуйста с программой, в которой класс sphere представляет шары. Конструктор с...

Программа с классом Point
Разработать класс Point для работы с объектами типа точка на плоскости. Определить в этом классе...

Программа с классом треугольник
Дали задачу написать программу с классом треугольника. А именно нужно: задать стороны треугольника,...

1
2498 / 1306 / 218
Регистрация: 26.02.2009
Сообщений: 5,872
Записей в блоге: 5
21.04.2017, 01:03 2
Лучший ответ Сообщение было отмечено Niko Demin как решение

Решение

Почему GLfloat indices[], а не int indices[]?
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.04.2017, 01:03

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Программа с классом и объектами!!!)))
Всем привет)Помогите пожалуйста исправить программку так,что бы она была с классом и...

Программа с классом и объектами.
Дана символьная матрица размера 4 х 5. Из последовательности её строк сформировать новую строку и...

программа с массивом и классом.....
Написал часть программы для составления некой базы 15 книг, где будет записано название книги и...

Программа с массивом и классом
Добрый день. Нужно написать программу. Если пользователь вводит 1 - даем ему записать марку машины....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.