利用GLFW创建一个窗口

创建窗口前的准备工作

创建GLFW窗口前需要先初始化GLFW并且设置窗口选项

GLFW初始化

int glfwInit(void);

成功返回 GLFW_TRUE 否则返回 GLFW_FALSE,
glfw没有布尔型数据采用1为true 0为false

设置界面属性

界面相关属性
	GLFW_RESIZABLE----------------用户能否调节窗口大小
	GLFW_VISIBLE------------------窗口是否可见
	GLFW_DECORATED----------------窗口边框的小部件是否可见
	GLFW_FOCUSED------------------窗口是否具有输入焦点
	GLFW_AUTO_ICONIFY-------------全屏窗口是否在焦点丢失,关闭窗口小部件等图标化
	GLFW_FLOATING-----------------置顶
	GLFW_MAXIMIZED----------------窗口最大化
	GLFW_CENTER_CURSOR------------光标是否在新创建的全屏窗口上居中
	GLFW_TRANSPARENT_FRAMEBUFFER--窗口透明
	GLFW_FOCUS_ON_SHOW------------获得输入焦点时glfwShowWindow是否被调用
	GLFW_SCALE_TO_MONITOR---------根据监视器内容比例调整窗口内容区域的大小
	GLFW_REFRESH_RATE-------------全屏时指定刷新率
缓冲区相关属性
	GLFW_RED_BITS-----------------颜色缓冲区中红色深度
	GLFW_GREEN_BITS---------------颜色缓冲区绿色深度
	GLFW_BLUE_BITS----------------颜色缓冲区蓝色深度
	GLFW_ALPHA_BITS---------------颜色缓冲区混合深度
	GLFW_DEPTH_BITS---------------深度缓冲区深度
	GLFW_STENCIL_BITS-------------模板缓冲区深度
	GLFW_ACCUM_RED_BITS-----------累积缓冲区中红色深度
	GLFW_ACCUM_GREEN_BITS---------累积缓冲区中绿色深度
	GLFW_STEREO	------------------OpenGL立体渲染
	GLFW_DOUBLEBUFFER-------------双缓冲区
	GLFW_ACCUM_BLUE_BITS----------累计缓冲区中蓝色深度
	GLFW_ACCUM_ALPHA_BITS---------累计缓冲区中混合深度
	GLFW_AUX_BUFFERS--------------辅助缓冲区
	GLFW_SAMPLES------------------多重采样的样本数
	GLFW_SRGB_CAPABLE-------------缓冲区是否支持sRGB
上下文相关属性
	GLFW_CONTEXT_VERSION_MAJOR---设置主版本号
	GLFW_CONTEXT_VERSION_MINOR---设置次版本号
	GLFW_CLIENT_API--------------设置OpenGL版本
	GLFW_CONTEXT_CREATION_API----创建上下文的API
	GLFW_OPENGL_FORWARD_COMPAT---是否向之前版本兼容
	GLFW_OPENGL_DEBUG_CONTEXT----是否创建调试上下文
	GLFW_OPENGL_PROFILE----------指定OpenGL上下文的配置文件
	GLFW_CONTEXT_ROBUSTNESS------指定上下文的健壮性策略
	GLFW_CONTEXT_RELEASE_BEHAVIOR-指定上下文要使用的发布行为
	GLFW_CONTEXT_NO_ERROR--------是否应由上下文生成错误
各个属性的默认值和取值范围
属性默认值取值范围
GLFW_RESIZABLEGLFW_TRUEGLFW_TRUE or GLFW_FALSE
GLFW_VISIBLEGLFW_TRUEGLFW_TRUE or GLFW_FALSE
GLFW_DECORATEDGLFW_TRUEGLFW_TRUE or GLFW_FALSE
GLFW_FOCUSEDGLFW_TRUEGLFW_TRUE or GLFW_FALSE
GLFW_AUTO_ICONIFYGLFW_TRUEGLFW_TRUE or GLFW_FALSE
GLFW_FLOATINGGLFW_FALSEGLFW_TRUE or GLFW_FALSE
GLFW_MAXIMIZEDGLFW_FALSEGLFW_TRUE or GLFW_FALSE
GLFW_RED_BITS80 to INT_MAX or GLFW_DONT_CARE
GLFW_GREEN_BITS80 to INT_MAX or GLFW_DONT_CARE
GLFW_BLUE_BITS80 to INT_MAX or GLFW_DONT_CARE
GLFW_ALPHA_BITS80 to INT_MAX or GLFW_DONT_CARE
GLFW_DEPTH_BITS240 to INT_MAX or GLFW_DONT_CARE
GLFW_STENCIL_BITS80 to INT_MAX or GLFW_DONT_CARE
GLFW_ACCUM_RED_BITS00 to INT_MAX or GLFW_DONT_CARE
GLFW_ACCUM_GREEN_BITS00 to INT_MAX or GLFW_DONT_CARE
GLFW_ACCUM_BLUE_BITS 00 to INT_MAX or GLFW_DONT_CARE
GLFW_ACCUM_ALPHA_BITS00 to INT_MAX or GLFW_DONT_CARE
GLFW_AUX_BUFFERS00 to INT_MAX or GLFW_DONT_CARE
GLFW_SAMPLES00 to INT_MAX or GLFW_DONT_CARE
GLFW_REFRESH_RATEGLFW_DONT_CARE0 to INT_MAX or GLFW_DONT_CARE
GLFW_STEREOGLFW_FALSEGLFW_TRUE or GLFW_FALSE
GLFW_SRGB_CAPABLEGLFW_FALSEGLFW_TRUE or GLFW_FALSE
GLFW_DOUBLEBUFFERGLFW_TRUEGLFW_TRUE or GLFW_FALSE
GLFW_CLIENT_APIGLFW_OPENGL_APIGLFW_OPENGL_API, GLFW_OPENGL_ES_API or GLFW_NO_API
GLFW_CONTEXT_CREATION_APIGLFW_NATIVE_CONTEXT_APIGLFW_NATIVE_CONTEXT_API or GLFW_EGL_CONTEXT_API
GLFW_CONTEXT_VERSION_MAJOR1Any valid major version number of the chosen client API
GLFW_CONTEXT_VERSION_MINOR0Any valid minor version number of the chosen client API
GLFW_CONTEXT_ROBUSTNESSGLFW_NO_ROBUSTNESSGLFW_NO_ROBUSTNESS, GLFW_NO_RESET_NOTIFICATION orGLFW_LOSE_CONTEXT_ON_RESET
GLFW_CONTEXT_RELEASE_BEHAVIORGLFW_ANY_RELEASE_BEHAVIORGLFW_ANY_RELEASE_BEHAVIOR,GLFW_RELEASE_BEHAVIOR_FLUSH orGLFW_RELEASE_BEHAVIOR_NONE
GLFW_OPENGL_FORWARD_COMPATGLFW_FALSEGLFW_TRUE or GLFW_FALSE
GLFW_OPENGL_DEBUG_CONTEXTGLFW_FALSEGLFW_TRUE or GLFW_FALSE
GLFW_OPENGL_PROFILEGLFW_OPENGL_ANY_PROFILEGLFW_OPENGL_ANY_PROFILE, GLFW_OPENGL_COMPAT_PROFILEor GLFW_OPENGL_CORE_PROFILE

创建窗口

GLFW下使用glfwCreateWindow函数创建窗口

GLFWwindow* glfwCreateWindow(int width, int height, const char* title, GLFWmonitor* monitor, GLFWwindow* share);
功能:
		此功能创建一个窗口及其关联的打开GL或打开GL ES上下文.
参数:
	width:	宽度
	height: 高度
	title:  标题
	monitor: 全屏模式或者窗口模式的监视器(给NULL )
	share:  共享资源或者不共享资源的窗口(给NULL)
返回值:
	成功返回窗口的句柄否则返回NULL
	可能的错误包括:
		GLFW_NOT_INITIALIZED -------------------没有初始化
		GLFW_INVALID_ENUM-----------------------无效的枚举
		GLFW_INVALID_VALUE----------------------无效的数值
		GLFW_API_UNAVAILABLE--------------------api不可用
		GLFW_VERSION_UNAVAILABLE-----------------版本不可用
		GLFW_FORMAT_UNAVAILABLE------------------格式错误
		GLFW_PLATFORM_ERROR----------------------平台错误

显示窗口

显示用glfwCreateWindow创建出来的窗口

void glfwMakeContextCurrent(GLFWwindow* window);
	参数:glfwCreateWindow创建的句柄

到此GLFW创建的窗口已经可以显示了,在程序结束之前还需要调用glfwTerminate函数释放掉GLFW的资源

完整代码

int main() {
	//glfw初始化
	glfwInit();
	glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
	glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
	
	GLFWwindow* window = glfwCreateWindow(800, 600, "test", NULL, NULL);
	if(window == NULL) {
		std::cout << "Failed to create GLFW window" << std::endl;
		glfwTerminate();
		return -1;
	}
	glfwMakeContextCurrent(window);
	glfwTerminate();
	return 0;
}

代码编译运行后会发现,窗口闪了一下就退出了,需要创建一个循环用于实现窗口的交互并且让窗口不释放

窗口事件交互

在调用窗口释放之前创建一个while循环循环条件是glfwWindowShouldClose函数的返回值

glfwWindowShouldClose(GLFWwindow*)
功  能:检查窗口是是否关闭
返回值:没有关闭返回GLFW_TRUE否则返回GLFW_FALSE

while循环中的内容

while(glfwWindowShouldClose(window )){
	//输入事件
	//窗口背景
	//绘制图案
}

完整代码

int main() {
	//glfw初始化
	glfwInit();
	glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
	glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
	
	GLFWwindow* window = glfwCreateWindow(800, 600, "test", NULL, NULL);
	if(window == NULL) {
		std::cout << "Failed to create GLFW window" << std::endl;
		glfwTerminate();
		return -1;
	}
	glfwMakeContextCurrent(window);
	
	while(glfwWindowShouldClose(window )){
		//输入事件
		//窗口背景
		//绘制图案
	}
	
	glfwTerminate();
	return 0;
}
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值