全屏幕OpenGL程序

其实在BCB中实现全屏幕OpenGL的原理是很简单的,只要在窗口OpenGL程序的基础上做一个小小的改动即可:只要将窗口属性修改为WS_POPUP就可以了。

具体如下:

在窗口类的CreateParam()成员函数中加入如下语句:

Params.Style=WS_POPUP|WS_CLIPCHILDREN|WS_CLIPSIBLINGS;

将相应窗口修改成WS_POPUP型窗口,另两个是为支持OpenGL为设的。

仍在窗口类的CreateParam()成员函数,加入如下语句:

ChangeResolution(800,600);

Params.Width=800;

Params.Height=600;

Params.X=Params.Y=0;

第一句将屏幕分辨率设定为800X600(可以是显示卡支持的任意值)

然后修改窗体大小使之占满全屏。

ChangeResolution()是一个自编的小函数,其原理如下:

用WINAPI:EnumDisplaySettings()查询并取得所需的显示模式

用WINAPI:ChangeDisplaySettings()修改显示模式。

ChangeResolution()的完整代码:

BOOL ChangeResolution(DWORD w, DWORD h) {
DEVMODE devMode;
LONG modeSwitch;
LONG i;
CHAR buf[256];
i = 0;
do {
modeSwitch = EnumDisplaySettings(NULL, i, &devMode);
i++;
} while(( (devMode.dmBitsPerPel!=16)
||(devMode.dmPelsWidth != w)
||(devMode.dmPelsHeight != h) )
&& (modeSwitch) );
/* Okay see if we found a mode */
if (!modeSwitch) { }
else {
modeSwitch = ChangeDisplaySettings(&devMode, 0);
if (modeSwitch!=DISP_CHANGE_SUCCESSFUL)
{
//Might be running in Windows95, let's try without the hertz change
devMode.dmBitsPerPel = 16;
devMode.dmPelsWidth = w;
devMode.dmPelsHeight = h;
devMode.dmFields = DM_BITSPERPEL | DM_PELSWIDTH | DM_PELSHEIGHT;
modeSwitch = ChangeDisplaySettings(&devMode, 0);
}
}
return TRUE;
}

样本程序

说明:通常这个程序运行时会看到屏幕底部有道白线,这是任务栏造成的,如果你将它的总在最前面(always on top)去掉或者将本程序窗口作成Always On Top型就不会再看到它了。

时间: 2024-10-29 00:37:56

全屏幕OpenGL程序的相关文章

《OpenGL编程指南(原书第9版)》——1.2 初识OpenGL程序

1.2 初识OpenGL程序 正因为可以用OpenGL去做那么多的事情,所以OpenGL程序有可能会写得非常庞大和复杂.不过,所有OpenGL程序的基本结构通常都是类似的: 1.?初始化物体渲染所对应的状态. 2.?设置需要渲染的物体. 在阅读代码之前,我们有必要了解一些最常用的图形学名词.渲染(render)这个词在前文中已经多次出现,它表示计算机从模型创建最终图像的过程.OpenGL只是其中一种渲染系统,除此之外,还有很多其他的渲染系统.OpenGL是基于光栅化的系统,但是也有别的方法用于生

《OpenGL编程指南》一1.2 初识OpenGL程序

1.2 初识OpenGL程序 正因为可以用OpenGL去做那么多的事情,所以OpenGL程序有可能会写得非常庞大和复杂.不过,所有OpenGL程序的基本结构通常都是类似的,其步骤如下:初始化物体渲染所对应的状态.设置需要渲染的物体.在阅读代码之前,我们有必要了解一些最常用的图形学名词.渲染(render)这个词在前文中已经多次出现,它表示计算机从模型创建最终图像的过程.OpenGL只是其中一种渲染系统,除此之外,还有很多其他的渲染系统.OpenGL是基于光栅化的系统,但是也有别的方法用于生成图像

求助:WPF调用一个已有的OpenGL程序,使用哪种方法好呢?

问题描述 现在已有一个使用OpenGL编写的树木建模程序,我需要用WPF做界面,对其进行调用.不知道使用什么方法比较合适?将C++程序封装成动态链接库然后调用,还是使用SharpGL,或是别的什么方法?求指点! 解决方案

调用opengl程序代码

// Test_of_callexe.cpp : Defines the entry point for the console application. // #include<stdafx.h> #include <windows.h> #include <stdio.h> #include <conio.h> int main(int argc, char * argv[]) { STARTUPINFO si = {0}; si.cb = sizeof

《OpenGL编程指南(原书第9版)》——1.5 第一个程序:深入分析

1.5 第一个程序:深入分析 现在我们来深入探讨一下之前的第一个程序.1.5.1 进入main()函数 为了了解示例程序从一开始是如何运行的,首先了解一下main()函数当中都发生了什么.前面的6行使用GLFW设置和打开了一个渲染用的窗口.这方面的详细介绍可以参见附录A,这里只介绍每一行的执行结果. 第一个函数glfwtInit()负责初始化GLFW库.它会处理向程序输入的命令行参数,并且移除其中与控制GLFW如何操作相关的部分(例如设置窗口的大小).glfwtInit()必须是应用程序调用的第

《OpenGL ES应用开发实践指南:Android卷》—— 1.2 创建第一个程序

1.2 创建第一个程序 我们已经安装并配置了工具,现在来创建第一个OpenGL程序.这个程序非常简单:它要做的只是初始化OpenGL并不停地清空屏幕:要得到一个可以实际做点什么的OpenGL程序,这是我们需要的最少的内容.Joe 问:为什么要不停地清空屏幕如果已经在每一帧的屏幕上都绘制了内容,清空屏幕好像是浪费的,那为什么还要这样做呢?回到一切都用软件渲染的时代,清空屏幕总是一种浪费:开发者总是要假定所有东西都已经绘制好了,并能覆盖前一帧的内容,而不必清空它,这样就能达到优化的目的:可以节省清空

《OpenGL ES应用开发实践指南:Android卷》—— 3.3 把着色器一起链接进OpenGL的程序

3.3 把着色器一起链接进OpenGL的程序 既然我们已经加载并编译了一个顶点着色器和一个片段着色器,下一步就是把它们绑定在一起放入一个单个的程序(program)里. 3.3.1 理解OpenGL的程序 简单来说,一个OpenGL程序就是把一个顶点着色器和一个片段着色器链接在一起变成单个对象.顶点着色器和片段着色器总是一起工作的.没有片段着色器,OpenGL就不知道怎么绘制那些组成每个点.直线和三角形的片段:如果没有顶点着色器,OpenGL就不知道在哪里绘制这些片段.我们知道顶点着色器计算屏幕

OpenGL编程轻松入门之背景简介

OpenGL(Open Graphics Library)是图形硬件的一个软件接口,也是该领域的工业标准.图形程序员利用这些指令可以创建高质量的交互式的三维应用.OpenGL的前身是SGI(Silicon Graphics)公司为其图形工作站开发的IRIS GL.IRIS GL虽然功能强大但是移植性不好,于是SGI公司便在IRIS GL的基础上开发了OpenGL. OpenGL是一个与硬件无关的软件接口.可以在不同的平台如Windows 95.Windows NT.Unix.Linux.MacO

OpenGL编程轻松入门之一个简单的例子(1)

先编译运行一个简单的例子,这样我们可以有一个直观的印象.从这个例子我们可以看到OpenGL可以做什么,当然这个例子只做了很简单的一件事--绘制一个彩色的三角形.除此以外,我们还可以看到典型的OpenGL程序结构及openGL的运行顺序. 例1:本例在黑色的背景下绘制一个彩色的三角形,如图一所示. #include <stdlib.h> #include <GL/glut.h> void background(void) { glClearColor(0.0,0.0,0.0,0.0)