Я пытаюсь создать класс Window , который может позаботиться о создании окна с основными функциями, такими как переключение полноэкранного и привязки ESC, чтобы закрыть окно и windo .
Я могу выйти с ESC , но когда я нажимаю f11 , я продолжаю получать исключение доступа к 0x001d6f6b в idk.exe: 0xc0000005: доступ Расположение чтения нарушений 0xcccccf78. в строке 16 в window.cpp , не уверен, почему это происходит. Вызов, и я вижу действительные значения, но как только GLFWGETWINDOWPOS (_Window, & _WindowedMode.xpos, & _windowedmode.ypos); Я продолжаю получать такую же ошибку, и я застрял.
window.h
#pragma once
#include
#include
#include
#include "Vertex.h"
class Window
{
public:
std::string _title;
bool _fullscreen;
GLFWwindow* _window;
WindowProperties _windowedMode;
float _aspectRatio;
Window(const std::string& title, WindowProperties winProp, bool fullscreen);
~Window();
static void FrameBufferCallback(GLFWwindow* window, int width, int height);
static void KeyCallback(GLFWwindow* window, int key, int scancode, int action, int mods);
bool init();
GLFWwindow* getWindow() const { return _window; }
void setKeyCallback(GLFWkeyfun callback) { glfwSetKeyCallback(_window, callback); }
void setScrollCallback(GLFWscrollfun callback) { glfwSetScrollCallback(_window, callback); }
void setCursorPositionCallback(GLFWcursorposfun callback) { glfwSetCursorPosCallback(_window, callback); }
private:
void toggleFullScreen();
void key_call_back(GLFWwindow* window, int key, int scancode, int action, int mods);
void framebuffer_size_callback(GLFWwindow* window, int width, int height);
};
< /code>
window.cpp:
#include "Window.h"
Window::Window(const std::string& title, WindowProperties winProp = { 100, 100, 920, 900 }, bool fullscreen = false)
: _title(title),
_windowedMode(winProp),
_fullscreen(fullscreen),
_window(nullptr),
_aspectRatio(float(winProp.width) / float(winProp.height)) {}
void Window::toggleFullScreen()
{
if (!_fullscreen)
{
// Switch to fullscreen mode
glfwGetWindowPos(_window, &_windowedMode.xpos, &_windowedMode.ypos);
glfwGetWindowSize(_window, &_windowedMode.width, &_windowedMode.height);
GLFWmonitor* monitor = glfwGetPrimaryMonitor();
const GLFWvidmode* mode = glfwGetVideoMode(monitor);
glfwSetWindowMonitor(_window, monitor, 0, 0, mode->width, mode->height, mode->refreshRate);
_fullscreen = true; // Update the flag after switching
}
else
{
// Switch back to windowed mode
glfwSetWindowMonitor(_window, nullptr, _windowedMode.xpos, _windowedMode.ypos,
_windowedMode.width, _windowedMode.height, 0);
_fullscreen = false; // Update the flag after switching
}
}
void Window::key_call_back(GLFWwindow* window, int key, int scancode, int action, int mods)
{
if (glfwGetKey(window, GLFW_KEY_ESCAPE) == GLFW_PRESS)
glfwSetWindowShouldClose(window, true);
// Add debouncing for F11 key
static bool f11Pressed = false;
if (glfwGetKey(window, GLFW_KEY_F11) == GLFW_PRESS)
{
if (!f11Pressed)
{
toggleFullScreen();
f11Pressed = true;
}
}
else
{
f11Pressed = false;
}
}
void Window::framebuffer_size_callback(GLFWwindow* window, int width, int height)
{
glViewport(0, 0, width, height);
_aspectRatio = float(width) / float(height);
}
void Window::KeyCallback(GLFWwindow* window, int key, int scancode, int action, int mods)
{
Window* windowInstance = static_cast(glfwGetWindowUserPointer(window));
if (windowInstance) {
windowInstance->key_call_back(window, key, scancode, action, mods);
}
}
void Window::FrameBufferCallback(GLFWwindow* window, int width, int height) {
// Retrieve the instance of TestBatchRendering
Window* instance = static_cast(glfwGetWindowUserPointer(window));
if (instance) {
instance->framebuffer_size_callback(window, width, height); // Call the member function
}
}
bool Window::init()
{
if (!glfwInit())
{
std::cerr
Подробнее здесь: https://stackoverflow.com/questions/793 ... ndow-class
Невозможно обрабатывать полный экран в OpenGL через класс окон ⇐ C++
Программы на C++. Форум разработчиков
-
Anonymous
1738070063
Anonymous
Я пытаюсь создать класс Window , который может позаботиться о создании окна с основными функциями, такими как переключение полноэкранного и привязки ESC, чтобы закрыть окно и windo .
Я могу выйти с ESC , но когда я нажимаю f11 , я продолжаю получать исключение доступа к 0x001d6f6b в idk.exe: 0xc0000005: доступ Расположение чтения нарушений 0xcccccf78. в строке 16 в window.cpp , не уверен, почему это происходит. Вызов, и я вижу действительные значения, но как только GLFWGETWINDOWPOS (_Window, & _WindowedMode.xpos, & _windowedmode.ypos); Я продолжаю получать такую же ошибку, и я застрял.
window.h
#pragma once
#include
#include
#include
#include "Vertex.h"
class Window
{
public:
std::string _title;
bool _fullscreen;
GLFWwindow* _window;
WindowProperties _windowedMode;
float _aspectRatio;
Window(const std::string& title, WindowProperties winProp, bool fullscreen);
~Window();
static void FrameBufferCallback(GLFWwindow* window, int width, int height);
static void KeyCallback(GLFWwindow* window, int key, int scancode, int action, int mods);
bool init();
GLFWwindow* getWindow() const { return _window; }
void setKeyCallback(GLFWkeyfun callback) { glfwSetKeyCallback(_window, callback); }
void setScrollCallback(GLFWscrollfun callback) { glfwSetScrollCallback(_window, callback); }
void setCursorPositionCallback(GLFWcursorposfun callback) { glfwSetCursorPosCallback(_window, callback); }
private:
void toggleFullScreen();
void key_call_back(GLFWwindow* window, int key, int scancode, int action, int mods);
void framebuffer_size_callback(GLFWwindow* window, int width, int height);
};
< /code>
window.cpp:
#include "Window.h"
Window::Window(const std::string& title, WindowProperties winProp = { 100, 100, 920, 900 }, bool fullscreen = false)
: _title(title),
_windowedMode(winProp),
_fullscreen(fullscreen),
_window(nullptr),
_aspectRatio(float(winProp.width) / float(winProp.height)) {}
void Window::toggleFullScreen()
{
if (!_fullscreen)
{
// Switch to fullscreen mode
glfwGetWindowPos(_window, &_windowedMode.xpos, &_windowedMode.ypos);
glfwGetWindowSize(_window, &_windowedMode.width, &_windowedMode.height);
GLFWmonitor* monitor = glfwGetPrimaryMonitor();
const GLFWvidmode* mode = glfwGetVideoMode(monitor);
glfwSetWindowMonitor(_window, monitor, 0, 0, mode->width, mode->height, mode->refreshRate);
_fullscreen = true; // Update the flag after switching
}
else
{
// Switch back to windowed mode
glfwSetWindowMonitor(_window, nullptr, _windowedMode.xpos, _windowedMode.ypos,
_windowedMode.width, _windowedMode.height, 0);
_fullscreen = false; // Update the flag after switching
}
}
void Window::key_call_back(GLFWwindow* window, int key, int scancode, int action, int mods)
{
if (glfwGetKey(window, GLFW_KEY_ESCAPE) == GLFW_PRESS)
glfwSetWindowShouldClose(window, true);
// Add debouncing for F11 key
static bool f11Pressed = false;
if (glfwGetKey(window, GLFW_KEY_F11) == GLFW_PRESS)
{
if (!f11Pressed)
{
toggleFullScreen();
f11Pressed = true;
}
}
else
{
f11Pressed = false;
}
}
void Window::framebuffer_size_callback(GLFWwindow* window, int width, int height)
{
glViewport(0, 0, width, height);
_aspectRatio = float(width) / float(height);
}
void Window::KeyCallback(GLFWwindow* window, int key, int scancode, int action, int mods)
{
Window* windowInstance = static_cast(glfwGetWindowUserPointer(window));
if (windowInstance) {
windowInstance->key_call_back(window, key, scancode, action, mods);
}
}
void Window::FrameBufferCallback(GLFWwindow* window, int width, int height) {
// Retrieve the instance of TestBatchRendering
Window* instance = static_cast(glfwGetWindowUserPointer(window));
if (instance) {
instance->framebuffer_size_callback(window, width, height); // Call the member function
}
}
bool Window::init()
{
if (!glfwInit())
{
std::cerr
Подробнее здесь: [url]https://stackoverflow.com/questions/79393895/unable-to-handle-toggle-full-screen-in-opengl-via-a-window-class[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия