Приложение должно использовать OpenGL с опциональным GLUT или аналогичным расширением. или даже чистый OpenGL.
У меня есть простой проект:
Код: Выделить всё
#include
#ifdef _WIN32
#include
#else
#include
#endif
#include
#include
#include
#include
#include
GLubyte* textureImage;
float rotateX = 0;
float rotateY = 0;
int mouseX;
int mouseY;
png_uint_32 g_width, g_height;
char g_buffer[100];
void init(void) {
glClearColor(0.0, 10.0, 0.0, 0.0);
glEnable(GL_DEPTH_TEST);
// The following two lines enable semi transparent
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
int width, height;
bool hasAlpha = true;
char filename[] = "D:\\Pobrane_2\\checkker2.png";
GLuint TextureId = 0;
png_image image;
memset(&image, 0, sizeof(image));
image.version = PNG_IMAGE_VERSION;
if (!png_image_begin_read_from_file(&image, filename)) {
sprintf(g_buffer, "!png_image_begin_read_from_file: [err=%ld]\n", GetLastError());
OutputDebugString(g_buffer);
g_buffer[0] = 0;
return;
}
png_bytep img_buffer;
image.format = PNG_FORMAT_BGRA;
img_buffer = new png_byte[PNG_IMAGE_SIZE(image)];
if (!png_image_finish_read(&image, NULL, img_buffer, 0, NULL)) {
sprintf(g_buffer, "!png_image_finish_read: [err=%ld]\n", GetLastError());
OutputDebugString(g_buffer);
g_buffer[0] = 0;
png_image_free(&image);
return;
}
textureImage = img_buffer;
width = image.width;
height = image.height;
glGenTextures(1, &TextureId);
glBindTexture(GL_TEXTURE_2D, TextureId);
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
// unbind the texture
glBindTexture(GL_TEXTURE_2D, 0);
glEnable(GL_TEXTURE_2D);
glShadeModel(GL_FLAT);
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
glTexImage2D(GL_TEXTURE_2D, 0, hasAlpha ? 4 : 3, width,
height, 0, hasAlpha ? GL_RGBA : GL_RGB, GL_UNSIGNED_BYTE, textureImage);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glEnable(GL_TEXTURE_2D);
glShadeModel(GL_FLAT);
}
void output(GLfloat x, GLfloat y, char* text)
{
char* p;
glPushMatrix();
glTranslatef(x, y, 0);
for (p = text; *p; p++)
glutStrokeCharacter(GLUT_STROKE_ROMAN, *p);
glPopMatrix();
}
void display(void)
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glBegin(GL_QUADS);
glTexCoord2f(0, 0);
glVertex2f(-1, -1);
glTexCoord2f(0, 1);
glVertex2f(-1, 1);
glTexCoord2f(1, 1);
glVertex2f(1, 1);
glTexCoord2f(1, 0);
glVertex2f(1, -1);
glEnd();
glFlush();
}
void myReshape(int w, int h) {
glViewport(0, 0, w, h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(60.0, 1.0 * (GLfloat)w / (GLfloat)h, 1.0, 30.0);
glMatrixMode(GL_MODELVIEW);
}
void mousePassive(int x, int y) {
mouseX = x;
mouseY = y;
}
void mouseMotion(int x, int y) {
const float SPEED = 2;
rotateX += (mouseX - x) / SPEED;
rotateY += (mouseY - y) / SPEED;
mousePassive(x, y);
glutPostRedisplay();
}
//int main(int argc, char** argv) {
int WINAPI WinMain(HINSTANCE hThisInst, HINSTANCE hPrevInst, LPSTR str, int nWinMode) {
glutInit(&__argc, __argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DEPTH);
glutCreateWindow("PNG texture");
/*glutMotionFunc(mouseMotion);
glutPassiveMotionFunc(mousePassive);*/
init();
//glutReshapeFunc(myReshape);
//glutReshapeWindow(g_width, g_height);
glutDisplayFunc(display);
glutMainLoop();
return 0;
}
[img]https: //i.sstatic.net/kE9OWgpb.png[/img]
Как избавиться от украшений окна хостинга, таких как строка заголовка и границы, чтобы иметь только изображение/текстура, нарисованная на экране? Я читал, что мне, вероятно, нужно перейти к так называемому внеэкранному рендерингу, но я действительно не знаю, как исправить код, чтобы добиться этого.
Я использую Windows 10 (MSVC 2022)
Подробнее здесь: https://stackoverflow.com/questions/790 ... ngl-window