Anonymous
Байты фиксированной длины и Glfw
Сообщение
Anonymous » 28 ноя 2025, 18:08
Я могу нарисовать прямоугольник без ошибок, если использую беззнаковый int или uint32_t в index[] и у меня есть 2 вопроса:
Почему я получаю треугольник при использовании uint8_t?
Я ничего не получаю, если его 2 байта (uint16_t)?
Нет проблем, пока он установлен на 4 байта.
Код: Выделить всё
#include
#include
#include
#include
#include
#include
//variables
const char* tit1 = "title";
const int width = 1280;
const int height = 720;
void framebuffer_size_callback(GLFWwindow* window, int width, int height);
void processInput(GLFWwindow* window);
std::string loadShaderSrc(const char* filename);
int main(int argc, char **argv)
{
glfwInit();
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
GLFWwindow* window1 = glfwCreateWindow(width, height, tit1, NULL, NULL);
glfwMakeContextCurrent(window1);
gladLoadGLLoader((GLADloadproc)glfwGetProcAddress);
glfwSwapInterval(1);
glfwSetFramebufferSizeCallback(window1, framebuffer_size_callback);
glViewport(0, 0, 1280, 720);
// reading shaders and transforming to const char* 's
std::string vertShaderSrc = loadShaderSrc("vertex_shader.glsl");
const char* vertShader = vertShaderSrc.c_str();
std::string fragShaderSrc = loadShaderSrc("fragment_shader.glsl");
const char* fragShader = fragShaderSrc.c_str();
// --- vertex shader ---
unsigned int vertexShader = glCreateShader(GL_VERTEX_SHADER);
glShaderSource(vertexShader, 1, &vertShader, NULL);
glCompileShader(vertexShader);
// --- fragment shader ---
unsigned int fragmentShader = glCreateShader(GL_FRAGMENT_SHADER);
glShaderSource(fragmentShader, 1, &fragShader, NULL);
glCompileShader(fragmentShader);
//shader program
unsigned int shaderProgram = glCreateProgram();
glAttachShader(shaderProgram, vertexShader);
glAttachShader(shaderProgram, fragmentShader);
glLinkProgram(shaderProgram);
glDeleteShader(vertexShader);
glDeleteShader(fragmentShader);
//vertices
float vertices[] = {
0.5f, 0.5f, 0.0f,
-0.5f, 0.5f, 0.0f,
-0.5f, -0.5f, 0.0f,
0.5f, -0.5f, 0.0f
};
uint32_t indices[] = {
0, 1, 2,
2, 3, 0
};
//VAO, VBO
unsigned int VAO, VBO, EBO;
glGenVertexArrays(1, &VAO);
glGenBuffers(1, &VBO);
glGenBuffers(1, &EBO);
glBindVertexArray(VAO);
glBindBuffer(GL_ARRAY_BUFFER, VBO);
glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, EBO);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(indices), indices, GL_STATIC_DRAW);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(float), (void*)0);
glEnableVertexAttribArray(0);
while (!glfwWindowShouldClose(window1)) {
processInput(window1);
glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT);
glBindVertexArray(VAO);
glUseProgram(shaderProgram);
//glDrawArrays(GL_TRIANGLES, 0, 6);
glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0);
glfwSwapBuffers(window1);
glfwPollEvents();
}
return 0;
}
void framebuffer_size_callback(GLFWwindow* window, int width, int height)
{
glViewport(0, 0, width, height);
}
void processInput(GLFWwindow* window)
{
if (glfwGetKey(window, GLFW_KEY_ESCAPE) == GLFW_PRESS || glfwGetKey(window, GLFW_KEY_Q) == GLFW_PRESS) {
glfwSetWindowShouldClose(window, true);
}
}
std::string loadShaderSrc(const char* filename)
{
std::ifstream file;
std::stringstream buf;
std::string return1 = "";
file.open(filename);
if (file.is_open()) {
buf
Подробнее здесь: [url]https://stackoverflow.com/questions/79832567/fixed-length-bytes-and-glfw[/url]
1764342511
Anonymous
Я могу нарисовать прямоугольник без ошибок, если использую беззнаковый int или uint32_t в index[] и у меня есть 2 вопроса: Почему я получаю треугольник при использовании uint8_t? Я ничего не получаю, если его 2 байта (uint16_t)? Нет проблем, пока он установлен на 4 байта. [code]#include #include #include #include #include #include //variables const char* tit1 = "title"; const int width = 1280; const int height = 720; void framebuffer_size_callback(GLFWwindow* window, int width, int height); void processInput(GLFWwindow* window); std::string loadShaderSrc(const char* filename); int main(int argc, char **argv) { glfwInit(); glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3); glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3); GLFWwindow* window1 = glfwCreateWindow(width, height, tit1, NULL, NULL); glfwMakeContextCurrent(window1); gladLoadGLLoader((GLADloadproc)glfwGetProcAddress); glfwSwapInterval(1); glfwSetFramebufferSizeCallback(window1, framebuffer_size_callback); glViewport(0, 0, 1280, 720); // reading shaders and transforming to const char* 's std::string vertShaderSrc = loadShaderSrc("vertex_shader.glsl"); const char* vertShader = vertShaderSrc.c_str(); std::string fragShaderSrc = loadShaderSrc("fragment_shader.glsl"); const char* fragShader = fragShaderSrc.c_str(); // --- vertex shader --- unsigned int vertexShader = glCreateShader(GL_VERTEX_SHADER); glShaderSource(vertexShader, 1, &vertShader, NULL); glCompileShader(vertexShader); // --- fragment shader --- unsigned int fragmentShader = glCreateShader(GL_FRAGMENT_SHADER); glShaderSource(fragmentShader, 1, &fragShader, NULL); glCompileShader(fragmentShader); //shader program unsigned int shaderProgram = glCreateProgram(); glAttachShader(shaderProgram, vertexShader); glAttachShader(shaderProgram, fragmentShader); glLinkProgram(shaderProgram); glDeleteShader(vertexShader); glDeleteShader(fragmentShader); //vertices float vertices[] = { 0.5f, 0.5f, 0.0f, -0.5f, 0.5f, 0.0f, -0.5f, -0.5f, 0.0f, 0.5f, -0.5f, 0.0f }; uint32_t indices[] = { 0, 1, 2, 2, 3, 0 }; //VAO, VBO unsigned int VAO, VBO, EBO; glGenVertexArrays(1, &VAO); glGenBuffers(1, &VBO); glGenBuffers(1, &EBO); glBindVertexArray(VAO); glBindBuffer(GL_ARRAY_BUFFER, VBO); glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, EBO); glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(indices), indices, GL_STATIC_DRAW); glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(float), (void*)0); glEnableVertexAttribArray(0); while (!glfwWindowShouldClose(window1)) { processInput(window1); glClearColor(0.0f, 0.0f, 0.0f, 1.0f); glClear(GL_COLOR_BUFFER_BIT); glBindVertexArray(VAO); glUseProgram(shaderProgram); //glDrawArrays(GL_TRIANGLES, 0, 6); glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0); glfwSwapBuffers(window1); glfwPollEvents(); } return 0; } void framebuffer_size_callback(GLFWwindow* window, int width, int height) { glViewport(0, 0, width, height); } void processInput(GLFWwindow* window) { if (glfwGetKey(window, GLFW_KEY_ESCAPE) == GLFW_PRESS || glfwGetKey(window, GLFW_KEY_Q) == GLFW_PRESS) { glfwSetWindowShouldClose(window, true); } } std::string loadShaderSrc(const char* filename) { std::ifstream file; std::stringstream buf; std::string return1 = ""; file.open(filename); if (file.is_open()) { buf Подробнее здесь: [url]https://stackoverflow.com/questions/79832567/fixed-length-bytes-and-glfw[/url]