Думаю, пора продолжить... Сейчас вкратце изложу, как создать свой курсор для окна. В принципе код очень прост, вся проблема в том, что нам надо загрузить картинку, в библиотеке glfw не предусмотрена загрузка картинок. Мы используем самое простое и минималистское решение, что мне удалось найти, ссылка. Не будем сильно вдаваться в подробности, возмём код из примеров, которые есть на той страницы. И добавим к нашему проекту пару файлов: lodepng.h, lodepng.cpp (как это сделать, будет зависеть от вашей IDE), так что это останется вашей проблемой. При желание, вы можете загрузить картинку и при помощи другой библиотеки, их полно в сети...
Не забудьте приготовить картинку самого курсора ;)
#include <glfw3.h>
#include<vector>
#include "lodepng.h"
std::vector<unsigned char> image; //the raw pixels
unsigned width, height;
void decodeOneStep(const char* filename)
{
// Декодируем файл
unsigned error = lodepng::decode(image, width, height, filename);
//Выводим ошибку, если возникли проблемы
if(error) std::cout << "decoder error " << error << ": " << lodepng_error_text(error) << std::endl;
//the pixels are now in the vector "image", 4 bytes per pixel, ordered RGBARGBA..., use it as texture, draw it, ...
}
int main(void)
{
GLFWwindow* window;
// Инициализация библиотеки
if (!glfwInit())
return -1;
// Создание окна
window = glfwCreateWindow(640, 480, "Hello World", NULL, NULL);
if (!window)
{
glfwTerminate();
return -1;
}
// Загружаем картинку
decodeOneStep("test.png");
// Создаём картинку,в формате понятном GLFW
GLFWimage* img = new GLFWimage;
img->height = height;
img->width = width;
img->pixels = &image[0];
// Создаём курсор, указываем позицию срабатывания курсора
GLFWcursor* cursor = glfwCreateCursor(img, 0, 0);
//Назначаем наш курсор действующим в этом окне
glfwSetCursor(window, cursor);
// Связываем контекст и окно
glfwMakeContextCurrent(window);
// Считайте, что это будет цвет нашего окна
glClearColor(.5f, .5f, .5f, 1.f);
// Главный цикл - кpутится пока окно не закрыто
while (!glfwWindowShouldClose(window))
{
// Заливка окна нашим цветом (очистка)
glClear(GL_COLOR_BUFFER_BIT);
// Переключаем буфер
glfwSwapBuffers(window);
// Обработка событий
glfwPollEvents();
}
glfwTerminate();
}
Незнаю, как на разных ОС, но у меня при загрузке очень больших курсоров (знаю, что глупость но хотелось попробовать, аж с размер окна), курсор начинал моргать. Нормальные курсоры работают как надо.
Не забудьте приготовить картинку самого курсора ;)
#include <glfw3.h>
#include<vector>
#include "lodepng.h"
std::vector<unsigned char> image; //the raw pixels
unsigned width, height;
void decodeOneStep(const char* filename)
{
// Декодируем файл
unsigned error = lodepng::decode(image, width, height, filename);
//Выводим ошибку, если возникли проблемы
if(error) std::cout << "decoder error " << error << ": " << lodepng_error_text(error) << std::endl;
//the pixels are now in the vector "image", 4 bytes per pixel, ordered RGBARGBA..., use it as texture, draw it, ...
}
int main(void)
{
GLFWwindow* window;
// Инициализация библиотеки
if (!glfwInit())
return -1;
// Создание окна
window = glfwCreateWindow(640, 480, "Hello World", NULL, NULL);
if (!window)
{
glfwTerminate();
return -1;
}
// Загружаем картинку
decodeOneStep("test.png");
// Создаём картинку,в формате понятном GLFW
GLFWimage* img = new GLFWimage;
img->height = height;
img->width = width;
img->pixels = &image[0];
// Создаём курсор, указываем позицию срабатывания курсора
GLFWcursor* cursor = glfwCreateCursor(img, 0, 0);
//Назначаем наш курсор действующим в этом окне
glfwSetCursor(window, cursor);
// Связываем контекст и окно
glfwMakeContextCurrent(window);
// Считайте, что это будет цвет нашего окна
glClearColor(.5f, .5f, .5f, 1.f);
// Главный цикл - кpутится пока окно не закрыто
while (!glfwWindowShouldClose(window))
{
// Заливка окна нашим цветом (очистка)
glClear(GL_COLOR_BUFFER_BIT);
// Переключаем буфер
glfwSwapBuffers(window);
// Обработка событий
glfwPollEvents();
}
glfwTerminate();
}
Незнаю, как на разных ОС, но у меня при загрузке очень больших курсоров (знаю, что глупость но хотелось попробовать, аж с размер окна), курсор начинал моргать. Нормальные курсоры работают как надо.