Nebula2探秘11-Simple Window

2024-01-18 02:08
文章标签 window simple 探秘 nebula2

本文主要是介绍Nebula2探秘11-Simple Window,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Nebula2探秘11-Simple Window

happykevins文

        前面的10节主要讲的是Nebula2内核层模块的应用,所以一直在黑黑Dos控制台下工作,可能大家已经非常想念Windows窗口了:) 从本章起,我将开始介绍Nebula2的应用层模块,并以一个最简单的Windows窗口程序开始。虽然简单,但是我们可以从中了解到Nebula2启动一个Windows窗口所需要的依赖,并且也简单的勾画了一个Nebula2的游戏循环。

     代码如下:

 
/* ************************************************************************** */
/*     Nebula2 - Tutorial 11                                                     */
/*   Create SimpleWindow Using nD3D9Server                                     */
/*   author: happykevins                                                         */
/* ************************************************************************** */

/// ----------------------------------------------------------------------------
///  +必要头文件

//  nebula2 includes
#include  " kernel/nkernelserver.h "
#include 
" kernel/nfileserver2.h "
#include 
" gfx2/nd3d9server.h "

//  Tutorial工具库:一些通用的宏定义
#include  " ../NebulaUtils/nutildefs.h "

///  -必要头文件
/// ----------------------------------------------------------------------------

/// ----------------------------------------------------------------------------
///  +链接库
#pragma  comment(lib, "wsock32.lib")
#pragma  comment(lib, "d_nkernel.lib")
#pragma  comment(lib, "d_nnebula.lib")

#pragma  comment(lib, "dxguid.lib")
#pragma  comment(lib, "dxerr9.lib")
#pragma  comment(lib, "d3d9.lib")
#pragma  comment(lib, "d3dx9d.lib")

#pragma  comment(lib, "d_ndirect3d9.lib")
///  -链接库
/// ----------------------------------------------------------------------------

/// ----------------------------------------------------------------------------
///  +声明使用的Nebula2 Package&Module
nNebulaUseModule(nresource);
nNebulaUseModule(nresourceserver);
nNebulaUseModule(nfont2);
nNebulaUseModule(nmesh2);
nNebulaUseModule(nmesharray);
nNebulaUseModule(nshader2);
nNebulaUseModule(ntexture2);
nNebulaUseModule(ngfxserver2);
nNebulaUsePackage(ndirect3d9);
///  -声明使用的Nebula2 Package&Module
/// ----------------------------------------------------------------------------

/// ----------------------------------------------------------------------------
///  +Application
int  main( int  argc,  const   char **  argv)
{
    
///  创建KernelServer
    nKernelServer *  ks  =  n_new(nKernelServer);

    
/// ----------------------------------------------------------------------------
    
///     +向KernelServer中添加Package&Module
    nNebulaAddModule(nresource);
    nNebulaAddModule(nresourceserver);
    nNebulaAddModule(nfont2);
    nNebulaAddModule(nmesh2);
    nNebulaAddModule(nmesharray);
    nNebulaAddModule(nshader2);
    nNebulaAddModule(ntexture2);
    nNebulaAddModule(ngfxserver2);
    ks
-> AddPackage(ndirect3d9);
    
///     +向KernelServer中添加Package&Module
    
/// ----------------------------------------------------------------------------

    
///  创建D3D9Server
    nD3D9Server *  gfx2  =  (nD3D9Server * )ks -> New( " nd3d9server " " /sys/servers/gfx " );
    
///  创建ResourceServer
    nResourceServer *  res  =  (nResourceServer * )ks -> New( " nresourceserver " " /sys/servers/resource " );
    
///  获得FileServer设置shaders的路径
    nFileServer2 *  file  =  (nFileServer2 * )ks -> Lookup( " sys/servers/file2 " );
    
///  @note:这是启动d3d9server必须的
    
///  因为d3d9server在初始化时会访问"shaders:shape.fx",用它来控制绘制调试图形的渲染状态
    file -> SetAssign( " shaders " " bin:../../datafiles/shaders/fixed " );
    
    
///  初始化显示模式
    nDisplayMode2 mode;
    mode.SetXPos(
150 );
    mode.SetYPos(
100 );
    mode.SetWidth(
640 );
    mode.SetHeight(
480 );

    
///  将显示模式应用到d3d9server
    gfx2 -> SetDisplayMode(mode);

    
///  启动d3d9server
    gfx2 -> OpenDisplay();

    
///  这里相当于游戏循环,gfx2->Trigger()将触发win32的消息泵
     while  ( gfx2 -> Trigger() )
    {
        
///  一帧开始
        gfx2 -> BeginFrame();
        
///  绘制场景开始
         if  ( gfx2 -> BeginScene() )
        {
            
///  设置渲染缓冲区
            gfx2 -> Clear(nGfxServer2::AllBuffers,  0.2f 0.2f 0.8f 1.0f 0 0 );
            
///  绘制场景结束
            gfx2 -> EndScene();
            
///  显示场景
            gfx2 -> PresentScene();
        }
        
///  一帧结束
        gfx2 -> EndFrame();
        n_sleep(
0.01f );
    }
    
    
///  关闭d3d9server
    gfx2 -> CloseDisplay();

    
///  销毁KernelServer
    n_delete(ks);

    
return   0 ;
}
///  -Application
/// ----------------------------------------------------------------------------



这篇关于Nebula2探秘11-Simple Window的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/617810

相关文章

uva 10014 Simple calculations(数学推导)

直接按照题意来推导最后的结果就行了。 开始的时候只做到了第一个推导,第二次没有继续下去。 代码: #include<stdio.h>int main(){int T, n, i;double a, aa, sum, temp, ans;scanf("%d", &T);while(T--){scanf("%d", &n);scanf("%lf", &first);scanf

js window.addEventListener 是什么?

window.addEventListener 是 JavaScript 中的一个方法,用于向指定对象(在这个情况下是 window 对象,代表浏览器窗口)添加事件监听器,以便在该对象上发生特定事件时执行相应的函数(称为事件处理函数或事件监听器)。 这个方法接受三个参数: 事件类型(type):一个字符串,表示要监听的事件类型。例如,"click" 表示鼠标点击事件,"load" 表示页面加

Qt中window frame的影响

window frame 在创建图形化界面的时候,会创建窗口主体,上面会多出一条,周围多次一圈细边,这就叫window frame窗口框架,这是操作系统自带的。 这个对geometry的一些属性有一定影响,主要体现在Qt坐标系体系: 窗口当中包含一个按钮,这个按钮的坐标系是以父元素为参考,那么这个参考是widget本体作为参考,还是window frame作为参考,这两种参考体系都存在

Caused by: android.view.WindowManager$BadTokenException: Unable to add window -- token android.os.B

一个bug日志 FATAL EXCEPTION: main03-25 14:24:07.724: E/AndroidRuntime(4135): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.syyx.jingubang.ky/com.anguotech.android.activity.Init

最初的window

不知你是否也是一个常年在MFC下编程的程序员,有的时候是否忘记了在MFC之前是如何写画窗口的了呢,或者你从来都只是机械的在MFC下面写代码,已经麻木了。其实有一个很简单的方法,或许能够帮你更清楚的了解WINDOW是怎么产生的。 随便用什么版本的VS,在创建win32工程的时候,直接创建WINDOW类型的就OK了。然后,来研究下产生的源代码吧。 // Global Variables:H

VC环境下window网络程序:UDP Socket程序

最近在学Windows网络编程,正好在做UDPsocket的程序,贴上来: 服务器框架函数:              socket();    bind();    recfrom();  sendto();  closesocket(); 客户机框架函数:            socket();      recfrom();  sendto();  closesocket();

Spring Boot 注解探秘:HTTP 请求的魅力之旅

在SpringBoot应用开发中,处理Http请求是一项基础且重要的任务。Spring Boot通过提供一系列丰富的注解极大地简化了这一过程,使得定义请求处理器和路由变得更加直观与便捷。这些注解不仅帮助开发者清晰地定义不同类型的HTTP请求如何被处理,同时也提升了代码的可读性和维护性。 一、@RequestMapping @RequestMapping用于将特定的HTTP请求映射到特定的方法上

Window下编译OpenJDK17

本文详细介绍Window下如何编译OpenJDK17,包含源码路径,各工具下载地址,严格按照文章中的步骤来操作,你将获得一个由自己亲手编译出的jdk。  一、下载OpenJDK17源码 下载地址:GitHub - openjdk/jdk at jdk-17+35 说明: 1、kkgithub为github的国内镜像,能够提高下载速度  2、下载下来的源码存放路径:无中文、无空格

黑神话悟空背后的技术揭秘与代码探秘

《重塑神话:黑神话悟空背后的技术揭秘与代码探秘》 引言 在国产游戏领域,《黑神话:悟空》无疑是一颗璀璨的明星,它不仅融合了深厚的中国文化元素,更在技术上实现了诸多突破,为玩家带来了前所未有的沉浸式体验。本文将深入剖析《黑神话:悟空》背后的关键技术,并通过代码案例展示其技术实现的魅力。 一、高精度动作捕捉技术 《黑神话:悟空》中的角色动作之所以如此逼真,得益于高精度动作捕捉技术的应用

POJ 2823 Sliding Window(线段树入门)

题意: 8 31 3 -1 -3 5 3 6 7 一串数列,有一个窗口大小为3,从数列开始往后移动,输出最大和最小值。 -1 -3 -3 -3 3 33 3 5 5 6 7 窗口大小为3 思路: 维护一个线段树,代码很详细 解题心得: 因为关键值的输入量有1000000,也就是叶节点有1000000个,总节点按理说是2000000-1,但这题得开3000000才能过