亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? gpu_util.h

?? 游戲編程精粹6第中關于粒子的實時流體仿真系統,對入門的游戲開發者很有幫助.
?? H
字號:
/** 
 * Utility code header for GPU utility functions
 *
 * Copyright (c) Takashi AMADA  All Rights Reseved
 **/


#ifndef _GPU_UTIL_H_
#define _GPU_UTIL_H_

#include <windows.h>

#include <GL/glew.h>
#include <GL/wglew.h>
#include <GL/gl.h>
#include <assert.h>
#include <stdio.h>


#define GPUT_BOOL int
#define GPUT_TRUE 1
#define GPUT_FALSE 0

typedef struct
{
	DWORD start;
	DWORD elapsed;
	int count;
} gput_profile;

typedef struct
{
	GLfloat position[4];
	GLfloat diffuse[4];
	GLfloat specular[4];
	GLfloat shininess;
} gput_mat;

typedef struct
{
	GLfloat position[4];
	GLfloat diffuse[4];
	GLfloat ambient[4];
} gput_light;

typedef struct
{
	GLint* array;
	int size;
	int cap;
} gput_intlist;


typedef struct
{
	HDC hdc;
	HGLRC hglrc;
} gput_context;

typedef struct
{
	HPBUFFERARB hpbuf;
	HDC hdc;
	HGLRC hglrc;
	int windowid;
	GLuint tex;
	GLenum target;
} gput_pbuffer;

typedef struct
{
	GLuint tex;
} gput_cubemap;

void gput_init();

_inline void gput_printf(const char* format, ...)
{
	va_list list;
	va_start(list, format);
	vprintf(format, list);
	va_end(list);
}

/** Shaders **/
//#define NO_NVCG
//#define SHADER_EMBEDDED

#ifndef NO_NVCG
#include <Cg/cg.h>
#include <Cg/cgGL.h>
CGcontext gput_cg_context();
#endif
#define SHADER_DIR "shaders\\"



#ifdef SHADER_EMBEDDED
#define FP_PROFILE CG_PROFILE_ARBFP1
#define VP_PROFILE CG_PROFILE_ARBVP1
#else
#define FP_PROFILE CG_PROFILE_ARBFP1
#define VP_PROFILE CG_PROFILE_ARBVP1
//#define FP_PROFILE CG_PROFILE_FP40
//#define VP_PROFILE CG_PROFILE_VP40
#endif


#ifdef SHADER_EMBEDDED
#define LOAD_FRAGMENT_PROGRAM(program, file) program = cgCreateProgram(\
	gput_cg_context(), CG_OBJECT, fp_str_##program, FP_PROFILE, NULL, NULL);\
	check_cg_error();\
	cgGLLoadProgram(program);\
	check_cg_error();
	//gput_printf("FP " #program " loaded\n")

#define LOAD_VERTEX_PROGRAM(program, file) program = cgCreateProgram(\
	gput_cg_context(), CG_OBJECT, vp_str_##program, VP_PROFILE, NULL, NULL);\
	check_cg_error();\
	cgGLLoadProgram(program);\
	check_cg_error();
	//gput_printf("VP " #program " loaded\n")

#define READ_FRAGMENT_PROGRAM(program, id, file) program = cgCreateProgram(\
	gput_cg_context(), CG_SOURCE, cg_str_##id, FP_PROFILE, NULL, NULL);\
	check_cg_error()

#else /* SHADER_EMBEDDED */

#define LOAD_FRAGMENT_PROGRAM(program, file) program = cgCreateProgramFromFile(\
	gput_cg_context(), CG_SOURCE, SHADER_DIR file, FP_PROFILE, NULL, NULL);\
	check_cg_error();\
	cgGLLoadProgram(program);\
	check_cg_error();\
	gput_printf("FP " #program " loaded\n")

#define LOAD_VERTEX_PROGRAM(program, file) program = cgCreateProgramFromFile(\
	gput_cg_context(), CG_SOURCE, SHADER_DIR file, VP_PROFILE, NULL, NULL);\
	check_cg_error();\
	cgGLLoadProgram(program);\
	check_cg_error();\
	gput_printf("VP " #program " loaded\n")

#define READ_FRAGMENT_PROGRAM(program, id, file) program = cgCreateProgramFromFile(\
	gput_cg_context(), CG_SOURCE, SHADER_DIR file, FP_PROFILE, NULL, NULL);\
	check_cg_error()
#endif /* SHADER_EMBEDDED */

#define CREATE_PARAM(x) cgCreateParameter(gput_cg_context(), x)


void gput_print_gpu_profile();

GLfloat gput_pack_2uint(GLuint i0, GLuint i1);

/** Material **/
/**
 * OpenGL material functions
 */
void gput_mat_init(gput_mat* mat);
void gput_mat_diffuse(gput_mat* mat, GLfloat r, GLfloat g, GLfloat b, GLfloat a);
void gput_mat_specular(gput_mat* mat, GLfloat r, GLfloat g, GLfloat b, GLfloat a);
void gput_mat_shininess(gput_mat* mat, GLfloat s);
void gput_mat_bind(gput_mat* mat);

/** Light **/
/**
 * OpenGL light functions
 */
void gput_light_init(gput_light* l);
void gput_light_position(gput_light* l, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
void gput_light_diffuse(gput_light* l, GLfloat r, GLfloat g, GLfloat b, GLfloat a);
void gput_light_ambient(gput_light* l, GLfloat r, GLfloat g, GLfloat b, GLfloat a);
void gput_light_bind(gput_light* l, GLenum light);

void gput_write_screen(const char* filename, int width, int height);

/** Texture **/
GPUT_BOOL gput_load_texture(GLenum target, const char* filename);
//void gput_load_texture(const char* filename);

/** Profile **/
void gput_profile_init(gput_profile* p);
void gput_profile_begin(gput_profile* p);
void gput_profile_end(gput_profile* p);
void gput_profile_print(gput_profile* p, const char* name);

#ifndef NO_NVCG
void gput_set_transferfp(CGprogram fp);
#endif
//CGprogram gput_create_program_from_file(const char* program_file, CGprofile profile, CGcontext context);
//void gput_cache_program(CGprogram prog, CGprofile prof);
//CGprogram gput_create_program(const char* src, CGprofile profile, CGcontext context);

//void gput_cubemap_create_from_file(gput_cubemap* map, const char* filename[6]);
GLuint gput_cubemap_create_from_file(const char* filename[6]);

/** Cubemap **/
void gput_cubemap_enable();
void gput_cubemap_disable();
void gput_cubemap_skybox();


/** Error **/
void check_gl_error();
#ifndef NO_NVCG
void check_cg_error();
#endif


/** OpenGL vertex **/
void gput_vert2i_tex1f(int vx, int vy, GLfloat tx);
void gput_vert2i_tex2f(int vx, int vy,
					   GLfloat tx, GLfloat ty);
void gput_vert2i_2tex2f(int vx, int vy,
						GLfloat x0, GLfloat y0, 
						GLfloat x1, GLfloat y1);
void gput_vert2i_3tex2f(int vx, int vy,
						GLfloat x0, GLfloat y0, 
						GLfloat x1, GLfloat y1,
						GLfloat x2, GLfloat y2);

void gput_set_orthorenderview(int x, int y, int view_width, int view_height);

/** Array list functions for P-buffer **/
void gput_intlist_create(gput_intlist* l);
void gput_intlist_pushpair(gput_intlist* l, GLint i0, GLint i1);
void gput_intlist_push(gput_intlist* l, GLint i);
void gput_intlist_destroy(gput_intlist* l);

void gput_context_get_current(gput_context* c);
void gput_context_activate(gput_context* c);

/** P-Buffer **/
void gput_pbuffer_bind(gput_pbuffer* buf);
void gput_pbuffer_cubemap_create(gput_pbuffer* buf, int width, int height);

void gput_pbuffer_create(gput_pbuffer* buf, GLenum target, int width, int height, ...);

void gput_pbuffer_activate(gput_pbuffer* buf);
//void gput_pbuffer_end(gput_pbuffer* buf);
void gput_pbuffer_float_set(gput_pbuffer* buf, int width, int height, const void* pixels);
void gput_dump_frame(const char* name, int n_components, int x0, int y0, int width, int height);
void gput_pbuffer_float_create(gput_pbuffer* buf, int n_components, int width, int height);

GLuint gput_create_float_buffer(GLint internalformat, GLsizei width, GLsizei height, GLenum format, void* pixels);
void gput_bind_float_buffer(GLuint tex);


// Inline 

#define GPUT_INLINE _inline

GPUT_INLINE GLfloat gput_pack_2uint(GLuint i0, GLuint i1)
{
	return (GLfloat)((i0 & 0xFFFF) | (i1 << 16));
}


#endif

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
免费xxxx性欧美18vr| 日产精品久久久久久久性色| 欧美日本在线播放| 国产一区在线精品| 亚洲永久免费视频| 亚洲国产一区二区视频| 国产视频一区二区三区在线观看| 99国内精品久久| 奇米色一区二区| ...av二区三区久久精品| 日韩免费高清电影| 欧美在线一二三四区| 国产精品123| 日韩电影在线免费看| 亚洲视频你懂的| 久久久www免费人成精品| 欧美一卡二卡三卡四卡| 在线免费观看一区| 色综合视频一区二区三区高清| 国产精品18久久久久久久网站| 美美哒免费高清在线观看视频一区二区 | 色噜噜夜夜夜综合网| 99视频在线观看一区三区| 激情综合亚洲精品| 日韩激情一二三区| 亚洲欧美日本在线| 久久免费的精品国产v∧| 欧美一区二区在线播放| 欧美三级一区二区| 欧美在线你懂得| 色婷婷精品久久二区二区蜜臂av | 精品一区免费av| 五月婷婷色综合| 亚洲午夜精品网| 自拍偷自拍亚洲精品播放| 久久久国产精品午夜一区ai换脸| 精品精品国产高清a毛片牛牛| 欧美精品一级二级| 欧美私模裸体表演在线观看| 色狠狠综合天天综合综合| 91亚洲精品久久久蜜桃网站| 成人app网站| 99久久精品国产精品久久| eeuss国产一区二区三区| av电影在线观看一区| 99久久久无码国产精品| 99久久99久久免费精品蜜臀| 91麻豆国产香蕉久久精品| 97se亚洲国产综合自在线不卡 | 国产黄色91视频| 国产精品综合二区| 高清久久久久久| 不卡高清视频专区| 一本久道久久综合中文字幕 | 精品一区精品二区高清| 国产乱理伦片在线观看夜一区| 国产剧情一区二区三区| 国产69精品久久久久777| 99久久精品国产毛片| 欧美亚洲综合另类| 91精品国产免费久久综合| 欧美mv日韩mv国产网站app| 国产亚洲综合色| 国产精品国产成人国产三级| 亚洲黄色尤物视频| 视频一区在线视频| 国产精品一级在线| 在线一区二区观看| 国产真实精品久久二三区| 日韩一区国产二区欧美三区| 日韩精品三区四区| 亚洲乱码中文字幕| 视频一区二区三区中文字幕| 狠狠色丁香婷综合久久| 国产精品久久久久久亚洲毛片| 欧美高清视频一二三区 | 国产无人区一区二区三区| 日韩一二在线观看| 国产精品天美传媒| 亚洲视频1区2区| 肉肉av福利一精品导航| 成人精品小蝌蚪| 午夜精品福利在线| 国产一区二区三区免费播放| 91在线国产福利| 欧美猛男男办公室激情| 久久久91精品国产一区二区精品 | 在线播放欧美女士性生活| 久久久综合视频| 一区二区三区在线免费| 老司机午夜精品99久久| 色悠悠亚洲一区二区| 欧美一区二区国产| **性色生活片久久毛片| 韩国三级中文字幕hd久久精品| 色94色欧美sute亚洲线路一久| 久久香蕉国产线看观看99| 一区二区三区蜜桃网| 国产麻豆精品theporn| 欧美日韩亚洲综合一区二区三区| wwwwxxxxx欧美| 香蕉av福利精品导航| 成+人+亚洲+综合天堂| 日韩精品一区二区三区视频在线观看| 亚洲婷婷综合久久一本伊一区| 久久99精品国产麻豆不卡| 欧美主播一区二区三区美女| 国产日韩综合av| 另类调教123区| 欧美另类高清zo欧美| 日韩一区中文字幕| 国产宾馆实践打屁股91| 日韩欧美激情四射| 午夜亚洲国产au精品一区二区| 成人aa视频在线观看| 国产亚洲一区二区三区四区| 青青草97国产精品免费观看| 日本电影欧美片| 日本一区二区免费在线观看视频| 精品一区二区三区免费观看| 91麻豆精品国产91久久久久久| 亚洲一区二区在线免费观看视频| 色域天天综合网| 亚洲少妇最新在线视频| 91色视频在线| 成人免费在线视频观看| 91一区二区三区在线播放| 中文字幕中文字幕在线一区 | 日韩欧美一级在线播放| 日韩激情在线观看| 欧美一级生活片| 天天色天天爱天天射综合| 欧美日韩日日摸| 亚洲成人免费观看| 成人午夜电影久久影院| 中文字幕乱码亚洲精品一区| 国产91丝袜在线播放九色| 欧美国产国产综合| 99久久精品情趣| 亚洲精品久久久久久国产精华液| jizzjizzjizz欧美| 夜夜精品视频一区二区| 在线电影院国产精品| 亚洲乱码日产精品bd| 欧美精品日韩一本| 韩国精品一区二区| 国产精品久久福利| 日韩不卡手机在线v区| 欧美高清精品3d| 午夜视频在线观看一区二区三区| 91一区二区三区在线播放| 中文字幕一区二区三区四区 | 一区二区三区四区乱视频| 国产精品18久久久| 久久久久久久综合色一本| 激情亚洲综合在线| 久久久电影一区二区三区| 久草精品在线观看| 日韩欧美久久一区| 精品一区二区在线观看| 欧美三级日韩在线| 亚洲靠逼com| 欧美日韩成人一区二区| 日韩av电影免费观看高清完整版在线观看 | 亚洲视频一二区| 色av一区二区| 首页亚洲欧美制服丝腿| 91精品国产手机| 精品一二线国产| 国产午夜精品在线观看| 99re成人精品视频| 亚洲6080在线| 日韩欧美亚洲国产另类| 国产一区日韩二区欧美三区| 日本一区二区视频在线观看| av电影在线观看一区| 一区二区三区日韩| 555www色欧美视频| 国产在线视频一区二区| 一区二区三区在线影院| 3751色影院一区二区三区| 国内精品国产三级国产a久久| 国产精品国产三级国产专播品爱网| 欧美日韩国产在线观看| 久久精品久久精品| 国产精品网友自拍| 欧美日韩一区二区在线观看| 国产在线精品一区二区不卡了| 中文一区在线播放| 欧美综合一区二区三区| 久久99国产乱子伦精品免费| 国产欧美精品日韩区二区麻豆天美| 91日韩在线专区| 欧美aaaaaa午夜精品| 国产精品区一区二区三| 欧美日韩电影一区| 福利一区福利二区| 亚洲高清免费视频| 欧美韩日一区二区三区| 欧美一级日韩免费不卡|