├── Code ├── AppDelegate.cpp ├── AppDelegate.h ├── ArrowScene.cpp ├── ArrowScene.h ├── BillardBall.cpp ├── BillardBall.h ├── BillardScene.cpp ├── BillardScene.h ├── Billards.sln ├── Billards.vcxproj ├── Billards.vcxproj.filters ├── Billards.vcxproj.user ├── CollisionDetector.cpp ├── CollisionDetector.h ├── EnumClass.h ├── GlobalVar.h ├── HeroChoice.cpp ├── HeroChoice.h ├── HeroChoice.obj ├── NormalDefine.h ├── OpenGLDraw.cpp ├── OpenGLDraw.h ├── Paddle.cpp ├── Paddle.h ├── Sprite2D.cpp ├── Sprite2D.h ├── crossable_amp.h ├── game.rc ├── glad.c ├── main.cpp ├── main.h ├── myGL.cpp ├── myGL.h ├── ray_tracing.cpp ├── ray_tracing.h ├── ray_tracing_tools_amp.h ├── res │ ├── game.ico │ └── pep.ico └── resource.h ├── README.md ├── REPORT-CN.pdf ├── Resources ├── BackGround1.jpg ├── BackGround2.jpg ├── BackGroundHero.jpg ├── CloseNormal.png ├── CloseSelected.png ├── HelloWorld.png ├── Hero1.png ├── Hero2.png ├── Hero3.png ├── Hp0.png ├── Hp1.png ├── LeftArrow.jpg ├── MidArrow.jpg ├── MoreNormal.png ├── MoreSelected.png ├── Prop1.png ├── Prop2.png ├── RightArrow.jpg ├── Sprite1.png ├── Sprite2.png ├── Sprite3.png ├── StartNormal.png ├── StartSelected.png ├── Weapon1.png ├── Weapon2.png ├── Weapon3.png ├── fonts │ ├── Marker Felt.ttf │ └── arial.ttf ├── res │ └── .gitkeep ├── shaders │ ├── cube.fsh │ ├── cube.vsh │ ├── trac.fsh │ └── trac.vsh └── textures │ ├── 0.bmp │ ├── 1.bmp │ ├── 10.bmp │ ├── 2.bmp │ ├── 3.bmp │ ├── 4.bmp │ ├── 5.bmp │ ├── 6.bmp │ ├── 7.bmp │ ├── 8.bmp │ ├── 9.bmp │ ├── desk.bmp │ ├── skybox │ ├── down.bmp │ ├── east.bmp │ ├── north.bmp │ ├── south.bmp │ ├── up.bmp │ └── west.bmp │ ├── textures.rar │ └── wood.jpg └── img ├── img1.png ├── img2.png └── tech1.png /Code/AppDelegate.cpp: -------------------------------------------------------------------------------- 1 | #include "AppDelegate.h" 2 | #include "ArrowScene.h" 3 | #include "NormalDefine.h" 4 | //#define USE_AUDIO_ENGINE 1 5 | #define USE_SIMPLE_AUDIO_ENGINE 1 6 | 7 | #if USE_AUDIO_ENGINE && USE_SIMPLE_AUDIO_ENGINE 8 | #error "Don't use AudioEngine and SimpleAudioEngine at the same time. Please just select one in your game!" 9 | #endif 10 | 11 | #if USE_AUDIO_ENGINE 12 | #include "audio/include/AudioEngine.h" 13 | using namespace cocos2d::experimental; 14 | #elif USE_SIMPLE_AUDIO_ENGINE 15 | #include "audio/include/SimpleAudioEngine.h" 16 | using namespace CocosDenshion; 17 | #endif 18 | 19 | USING_NS_CC; 20 | 21 | static cocos2d::Size designResolutionSize = cocos2d::Size(SCREEN_WIDTH, SCREEN_HEIGHT); 22 | static cocos2d::Size smallResolutionSize = cocos2d::Size(480, 320); 23 | static cocos2d::Size mediumResolutionSize = cocos2d::Size(1024, 768); 24 | static cocos2d::Size largeResolutionSize = cocos2d::Size(2048, 1536); 25 | 26 | AppDelegate::AppDelegate() 27 | { 28 | } 29 | 30 | AppDelegate::~AppDelegate() 31 | { 32 | #if USE_AUDIO_ENGINE 33 | AudioEngine::end(); 34 | #elif USE_SIMPLE_AUDIO_ENGINE 35 | SimpleAudioEngine::end(); 36 | #endif 37 | } 38 | 39 | // if you want a different context, modify the value of glContextAttrs 40 | // it will affect all platforms 41 | void AppDelegate::initGLContextAttrs() 42 | { 43 | // set OpenGL context attributes: red,green,blue,alpha,depth,stencil,multisamplesCount 44 | GLContextAttrs glContextAttrs = { 8, 8, 8, 8, 24, 8, 0 }; 45 | 46 | GLView::setGLContextAttrs(glContextAttrs); 47 | } 48 | 49 | // if you want to use the package manager to install more packages, 50 | // don't modify or remove this function 51 | static int register_all_packages() 52 | { 53 | return 0; //flag for packages manager 54 | } 55 | 56 | bool AppDelegate::applicationDidFinishLaunching() { 57 | // initialize director 58 | auto director = Director::getInstance(); 59 | auto glview = director->getOpenGLView(); 60 | if (!glview) { 61 | #if (CC_TARGET_PLATFORM == CC_PLATFORM_WIN32) || (CC_TARGET_PLATFORM == CC_PLATFORM_MAC) || (CC_TARGET_PLATFORM == CC_PLATFORM_LINUX) 62 | glview = GLViewImpl::createWithRect("Billards Simulations 1.0.1", cocos2d::Rect(0, 0, designResolutionSize.width, designResolutionSize.height)); 63 | #else 64 | glview = GLViewImpl::create("Billards Simulations 1.0.1"); 65 | #endif 66 | director->setOpenGLView(glview); 67 | } 68 | 69 | 70 | SimpleAudioEngine::getInstance()->preloadBackgroundMusic("backgroundmusic.mp3"); 71 | 72 | SimpleAudioEngine::getInstance()->playBackgroundMusic("backgroundmusic.mp3", true); 73 | // turn on display FPS 74 | director->setDisplayStats(true); 75 | 76 | // set FPS. the default value is 1.0/60 if you don't call this 77 | director->setAnimationInterval(1.0f / 60); 78 | 79 | // Set the design resolution 80 | glview->setDesignResolutionSize(designResolutionSize.width, designResolutionSize.height, ResolutionPolicy::NO_BORDER); 81 | /* 82 | auto frameSize = glview->getFrameSize(); 83 | 84 | 85 | // if the frame's height is larger than the height of medium size. 86 | if (frameSize.height > mediumResolutionSize.height) 87 | { 88 | director->setContentScaleFactor(MIN(largeResolutionSize.height/designResolutionSize.height, largeResolutionSize.width/designResolutionSize.width)); 89 | } 90 | // if the frame's height is larger than the height of small size. 91 | else if (frameSize.height > smallResolutionSize.height) 92 | { 93 | director->setContentScaleFactor(MIN(mediumResolutionSize.height/designResolutionSize.height, mediumResolutionSize.width/designResolutionSize.width)); 94 | } 95 | // if the frame's height is smaller than the height of medium size. 96 | else 97 | { 98 | director->setContentScaleFactor(MIN(smallResolutionSize.height/designResolutionSize.height, smallResolutionSize.width/designResolutionSize.width)); 99 | } 100 | */ 101 | register_all_packages(); 102 | 103 | // create a scene. it's an autorelease object 104 | auto scene = arrowFight::createScene(); 105 | 106 | // run 107 | director->runWithScene(scene); 108 | 109 | return true; 110 | } 111 | 112 | // This function will be called when the app is inactive. Note, when receiving a phone call it is invoked. 113 | void AppDelegate::applicationDidEnterBackground() { 114 | Director::getInstance()->stopAnimation(); 115 | 116 | #if USE_AUDIO_ENGINE 117 | AudioEngine::pauseAll(); 118 | #elif USE_SIMPLE_AUDIO_ENGINE 119 | SimpleAudioEngine::getInstance()->pauseBackgroundMusic(); 120 | SimpleAudioEngine::getInstance()->pauseAllEffects(); 121 | #endif 122 | } 123 | 124 | // this function will be called when the app is active again 125 | void AppDelegate::applicationWillEnterForeground() { 126 | Director::getInstance()->startAnimation(); 127 | 128 | #if USE_AUDIO_ENGINE 129 | AudioEngine::resumeAll(); 130 | #elif USE_SIMPLE_AUDIO_ENGINE 131 | SimpleAudioEngine::getInstance()->resumeBackgroundMusic(); 132 | SimpleAudioEngine::getInstance()->resumeAllEffects(); 133 | #endif 134 | } 135 | -------------------------------------------------------------------------------- /Code/AppDelegate.h: -------------------------------------------------------------------------------- 1 | #ifndef _APP_DELEGATE_H_ 2 | #define _APP_DELEGATE_H_ 3 | 4 | #include "cocos2d.h" 5 | 6 | class AppDelegate : private cocos2d::Application 7 | { 8 | public: 9 | AppDelegate(); 10 | virtual ~AppDelegate(); 11 | 12 | virtual void initGLContextAttrs(); 13 | /** 14 | @brief Implement Director and Scene init code here. 15 | @return true Initialize success, app continue. 16 | @return false Initialize failed, app terminate. 17 | */ 18 | virtual bool applicationDidFinishLaunching(); 19 | /** 20 | @brief Called when the application moves to the background 21 | @param the pointer of the application 22 | */ 23 | virtual void applicationDidEnterBackground(); 24 | /** 25 | @brief Called when the application reenters the foreground 26 | @param the pointer of the application 27 | */ 28 | virtual void applicationWillEnterForeground(); 29 | }; 30 | 31 | #endif // _APP_DELEGATE_H_ 32 | 33 | -------------------------------------------------------------------------------- /Code/ArrowScene.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ganler/bimulator/9021a3aa72b394bad552fedb4b68dfec135e08e4/Code/ArrowScene.cpp -------------------------------------------------------------------------------- /Code/ArrowScene.h: -------------------------------------------------------------------------------- 1 | #ifndef __HELLOWORLD_SCENE_H__ 2 | #define __HELLOWORLD_SCENE_H__ 3 | 4 | #include 5 | #include "cocos2d.h" 6 | 7 | class arrowFight : public cocos2d::Scene 8 | { 9 | public: 10 | static cocos2d::Scene* createScene(); 11 | 12 | virtual bool init(); 13 | void menuCloseCallback(cocos2d::Ref* pSender); 14 | void menuStartCallBack(cocos2d::Ref* pSender); 15 | CREATE_FUNC(arrowFight); 16 | 17 | }; 18 | 19 | #endif // __HELLOWORLD_SCENE_H__ 20 | -------------------------------------------------------------------------------- /Code/BillardBall.cpp: -------------------------------------------------------------------------------- 1 | #include "BillardBall.h" 2 | #include "SimpleAudioEngine.h" 3 | #include "cmath" 4 | #include "ctime" 5 | #include "GlobalVar.h" 6 | USING_NS_CC; 7 | 8 | BillardBall::~BillardBall() { 9 | 10 | } 11 | 12 | BillardBall::BillardBall(b2World* game, int type, Vec2 position, int color) :Sprite2D(game, type) { 13 | 14 | _startPosition = position; 15 | _color = color; 16 | setSelect(false); 17 | setDie(false); 18 | _rotateVector = Vec3(0.0f, 0.0f, 0.0f); 19 | _rotateAngle = 0.0f; 20 | 21 | } 22 | 23 | BillardBall* BillardBall::create(b2World* game, int type, Vec2 position, int color) { 24 | BillardBall* sprite = new BillardBall(game, type, position, color); 25 | if (sprite) { 26 | sprite->init(); 27 | sprite->autorelease(); 28 | return sprite; 29 | } 30 | CC_SAFE_DELETE(sprite); 31 | return NULL; 32 | } 33 | 34 | bool BillardBall::init() { 35 | if (!Sprite::init()){ 36 | return false; 37 | } 38 | b2BodyDef bodyDef; 39 | bodyDef.type = b2_dynamicBody; 40 | setBody(getGame()->CreateBody(&bodyDef)); 41 | getBody()->SetSleepingAllowed(true); 42 | getBody()->SetLinearVelocity(b2Vec2(0.0f, 0.0f)); 43 | if (nowHero == 1 || nowHero == 3) { 44 | getBody()->SetLinearDamping(0.4f); 45 | getBody()->SetAngularDamping(0.4f); 46 | } 47 | else{ 48 | getBody()->SetLinearDamping(0.0f); 49 | getBody()->SetAngularDamping(0.0f); 50 | } 51 | b2CircleShape circle; 52 | circle.m_radius = BALL_RADIUS / PTM_RATIO; 53 | 54 | b2FixtureDef fixtureDef; 55 | fixtureDef.shape = &circle; 56 | fixtureDef.density = 15; 57 | fixtureDef.restitution = 1.0; 58 | fixtureDef.isSensor = false; 59 | if (nowHero == 1 || nowHero == 3) 60 | fixtureDef.friction = 0.01; 61 | else 62 | fixtureDef.friction = 0.0f; 63 | getBody()->SetBullet(true); 64 | initWithFile("Sprite1.png"); 65 | setScale(0.6f); 66 | setVisible(false); 67 | getBody()->CreateFixture(&fixtureDef); 68 | getBody()->SetUserData(this); 69 | 70 | setSpritePosition(_startPosition); 71 | } 72 | 73 | void BillardBall::reset() { 74 | if (getBody()) { 75 | getBody()->SetLinearVelocity(b2Vec2_zero); 76 | getBody()->SetAngularVelocity(0); 77 | getBody()->SetAwake(true); 78 | } 79 | setSpritePosition(_startPosition); 80 | setSelect(false); 81 | setVisible(false); 82 | } 83 | 84 | void BillardBall::die() 85 | { 86 | if (getBody()) { 87 | b2World* _pWorld = getGame(); 88 | _pWorld->DestroyBody(getBody()); 89 | } 90 | setDie(true); 91 | return; 92 | } 93 | void BillardBall::update(float delta) { 94 | if (getBody()) { 95 | setPosition(Vec2(getBody()->GetPosition().x * PTM_RATIO, getBody()->GetPosition().y * PTM_RATIO)); 96 | setRotation(CC_RADIANS_TO_DEGREES(-1 * _body->GetAngle())); 97 | b2Vec2 VelTo = getBody()->GetLinearVelocity(); 98 | _rotateVector = Vec3(VelTo.y, VelTo.x, 0.0f)/VelTo.Length(); 99 | _rotateAngle = VelTo.Length() / BALL_RADIUS; 100 | } 101 | return; 102 | } -------------------------------------------------------------------------------- /Code/BillardBall.h: -------------------------------------------------------------------------------- 1 | #ifndef __BILLARDBALL_ 2 | #define __BILLARDBALL_ 3 | 4 | #include "Sprite2D.h" 5 | #include "Box2D\Box2D.h" 6 | 7 | class BillardBall : public Sprite2D { 8 | public: 9 | CC_SYNTHESIZE(bool, _select, Select); 10 | CC_SYNTHESIZE(bool, _die, Die); 11 | ~BillardBall(); 12 | BillardBall(b2World* game, int type, Vec2 position, int color); 13 | static BillardBall* create(b2World* game, int type, Vec2 position, int color); 14 | bool init(); 15 | void reset(); 16 | void die(); 17 | void update(float delta); 18 | 19 | private: 20 | Vec2 _startPosition; 21 | int _color; 22 | Vec3 _rotateVector; 23 | float _rotateAngle; 24 | }; 25 | 26 | 27 | #endif -------------------------------------------------------------------------------- /Code/BillardScene.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ganler/bimulator/9021a3aa72b394bad552fedb4b68dfec135e08e4/Code/BillardScene.cpp -------------------------------------------------------------------------------- /Code/BillardScene.h: -------------------------------------------------------------------------------- 1 | #ifndef _BILLARD_HERO_H 2 | 3 | #define _BILLARD_HERO_H 4 | 5 | #include "map" 6 | #include "cocos2d.h" 7 | #include "EnumClass.h" 8 | #include "NormalDefine.h" 9 | #include "BillardBall.h" 10 | #include "CollisionDetector.h" 11 | #include "vector" 12 | 13 | USING_NS_CC; 14 | 15 | 16 | struct SightLine { 17 | Vec3 oriVector; 18 | Vec3 dirVector; 19 | SightLine(Vec3 _ori = Vec3(SCREEN_WIDTH / 2.0f, SCREEN_HEIGHT / 2.0f, 30.0f), Vec3 _dir = Vec3(1.0f, 0.0f, 0.0f)) 20 | :oriVector(_ori), dirVector(_dir) {} 21 | bool RayBallIntersection(const Vec3& centerPoint, float radius) 22 | 23 | { 24 | radius = radius * 1.2f; 25 | Vec3 oc = centerPoint - oriVector; 26 | if (oc.length() <= radius) { 27 | return true; 28 | } 29 | dirVector.normalize(); 30 | const float proj = oc.dot(dirVector); 31 | if (proj <= 0) { 32 | return false; 33 | } 34 | const float distance2 = oc.dot(oc) - proj * proj; 35 | if (distance2 <= radius * radius) { 36 | return true; 37 | } 38 | else { 39 | return false; 40 | } 41 | } 42 | Vec3 RayPlaneIntersection(const Vec3& planePoint, Vec3 planeNormal) 43 | { 44 | planeNormal.normalize(); 45 | const float t = (planeNormal.dot(planePoint) - planeNormal.dot(oriVector)) / planeNormal.dot(dirVector); 46 | return oriVector + t * oriVector; 47 | 48 | } 49 | }; 50 | 51 | class BillardScene : public Layer 52 | { 53 | public: 54 | virtual bool init(); 55 | CREATE_FUNC(BillardScene); 56 | static cocos2d::Scene* scene(); 57 | 58 | void update(float delta); 59 | 60 | void billardSceneListener(); 61 | 62 | void postDataInterface(std::vector& billardPositon, std::vector& rotateNormal, std::vector& rotateAngle, MyVec3& rayPoint, MyVec3& rayDir, MyVec3& rayEnd); 63 | 64 | private: 65 | BillardBall* _billbard[MAX_BALL]; 66 | b2World* _world; 67 | CollisonDetector* _contactListener; 68 | SightLine _sightline; 69 | std::map keys; 70 | float _force; 71 | }; 72 | 73 | 74 | 75 | #endif -------------------------------------------------------------------------------- /Code/Billards.sln: -------------------------------------------------------------------------------- 1 |  2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio Version 16 4 | VisualStudioVersion = 16.0.29424.173 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Billards", "Billards.vcxproj", "{76A39BB2-9B84-4C65-98A5-654D86B86F2A}" 7 | ProjectSection(ProjectDependencies) = postProject 8 | {98A51BA8-FC3A-415B-AC8F-8C7BD464E93E} = {98A51BA8-FC3A-415B-AC8F-8C7BD464E93E} 9 | EndProjectSection 10 | EndProject 11 | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libcocos2d", "..\cocos2d\cocos\2d\libcocos2d.vcxproj", "{98A51BA8-FC3A-415B-AC8F-8C7BD464E93E}" 12 | EndProject 13 | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libSpine", "..\cocos2d\cocos\editor-support\spine\proj.win32\libSpine.vcxproj", "{B7C2A162-DEC9-4418-972E-240AB3CBFCAE}" 14 | EndProject 15 | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "librecast", "..\cocos2d\external\recast\proj.win32\librecast.vcxproj", "{41E34993-647E-4282-8384-4AB1AE31A452}" 16 | EndProject 17 | Global 18 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 19 | Debug|Win32 = Debug|Win32 20 | Debug|x64 = Debug|x64 21 | Release|Win32 = Release|Win32 22 | Release|x64 = Release|x64 23 | EndGlobalSection 24 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 25 | {76A39BB2-9B84-4C65-98A5-654D86B86F2A}.Debug|Win32.ActiveCfg = Debug|Win32 26 | {76A39BB2-9B84-4C65-98A5-654D86B86F2A}.Debug|Win32.Build.0 = Debug|Win32 27 | {76A39BB2-9B84-4C65-98A5-654D86B86F2A}.Debug|x64.ActiveCfg = Debug|x64 28 | {76A39BB2-9B84-4C65-98A5-654D86B86F2A}.Debug|x64.Build.0 = Debug|x64 29 | {76A39BB2-9B84-4C65-98A5-654D86B86F2A}.Release|Win32.ActiveCfg = Release|Win32 30 | {76A39BB2-9B84-4C65-98A5-654D86B86F2A}.Release|Win32.Build.0 = Release|Win32 31 | {76A39BB2-9B84-4C65-98A5-654D86B86F2A}.Release|x64.ActiveCfg = Release|x64 32 | {76A39BB2-9B84-4C65-98A5-654D86B86F2A}.Release|x64.Build.0 = Release|x64 33 | {98A51BA8-FC3A-415B-AC8F-8C7BD464E93E}.Debug|Win32.ActiveCfg = Debug|Win32 34 | {98A51BA8-FC3A-415B-AC8F-8C7BD464E93E}.Debug|Win32.Build.0 = Debug|Win32 35 | {98A51BA8-FC3A-415B-AC8F-8C7BD464E93E}.Debug|x64.ActiveCfg = Debug|Win32 36 | {98A51BA8-FC3A-415B-AC8F-8C7BD464E93E}.Release|Win32.ActiveCfg = Release|Win32 37 | {98A51BA8-FC3A-415B-AC8F-8C7BD464E93E}.Release|Win32.Build.0 = Release|Win32 38 | {98A51BA8-FC3A-415B-AC8F-8C7BD464E93E}.Release|x64.ActiveCfg = Release|Win32 39 | {B7C2A162-DEC9-4418-972E-240AB3CBFCAE}.Debug|Win32.ActiveCfg = Debug|Win32 40 | {B7C2A162-DEC9-4418-972E-240AB3CBFCAE}.Debug|Win32.Build.0 = Debug|Win32 41 | {B7C2A162-DEC9-4418-972E-240AB3CBFCAE}.Debug|x64.ActiveCfg = Debug|Win32 42 | {B7C2A162-DEC9-4418-972E-240AB3CBFCAE}.Release|Win32.ActiveCfg = Release|Win32 43 | {B7C2A162-DEC9-4418-972E-240AB3CBFCAE}.Release|Win32.Build.0 = Release|Win32 44 | {B7C2A162-DEC9-4418-972E-240AB3CBFCAE}.Release|x64.ActiveCfg = Release|Win32 45 | {41E34993-647E-4282-8384-4AB1AE31A452}.Debug|Win32.ActiveCfg = Debug|Win32 46 | {41E34993-647E-4282-8384-4AB1AE31A452}.Debug|Win32.Build.0 = Debug|Win32 47 | {41E34993-647E-4282-8384-4AB1AE31A452}.Debug|x64.ActiveCfg = Debug|Win32 48 | {41E34993-647E-4282-8384-4AB1AE31A452}.Release|Win32.ActiveCfg = Release|Win32 49 | {41E34993-647E-4282-8384-4AB1AE31A452}.Release|Win32.Build.0 = Release|Win32 50 | {41E34993-647E-4282-8384-4AB1AE31A452}.Release|x64.ActiveCfg = Release|Win32 51 | EndGlobalSection 52 | GlobalSection(SolutionProperties) = preSolution 53 | HideSolutionNode = FALSE 54 | EndGlobalSection 55 | GlobalSection(ExtensibilityGlobals) = postSolution 56 | SolutionGuid = {CF504477-6D06-4449-BF7D-AC5CB0F2EB27} 57 | EndGlobalSection 58 | EndGlobal 59 | -------------------------------------------------------------------------------- /Code/Billards.vcxproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Debug 7 | Win32 8 | 9 | 10 | Debug 11 | x64 12 | 13 | 14 | Release 15 | Win32 16 | 17 | 18 | Release 19 | x64 20 | 21 | 22 | 23 | {76A39BB2-9B84-4C65-98A5-654D86B86F2A} 24 | test_win32 25 | Win32Proj 26 | 10.0.17763.0 27 | 28 | 29 | 30 | Application 31 | Unicode 32 | true 33 | v120 34 | v120_xp 35 | v140 36 | v140_xp 37 | v141 38 | v141_xp 39 | v142 40 | 41 | 42 | Application 43 | Unicode 44 | true 45 | v120 46 | v120_xp 47 | v140 48 | v140_xp 49 | v141 50 | v141_xp 51 | v142 52 | 53 | 54 | Application 55 | Unicode 56 | v120 57 | v120_xp 58 | v140 59 | v140_xp 60 | v141 61 | v141_xp 62 | v142 63 | 64 | 65 | Application 66 | Unicode 67 | v120 68 | v120_xp 69 | v140 70 | v140_xp 71 | v141 72 | v141_xp 73 | v142 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | <_ProjectFileVersion>12.0.21005.1 101 | $(SolutionDir)$(Configuration).win32\ 102 | $(Configuration).win32\ 103 | true 104 | true 105 | $(SolutionDir)$(Configuration).win32\ 106 | $(Configuration).win32\ 107 | false 108 | false 109 | AllRules.ruleset 110 | AllRules.ruleset 111 | 112 | 113 | 114 | 115 | AllRules.ruleset 116 | AllRules.ruleset 117 | 118 | 119 | 120 | 121 | 122 | 123 | $(MSBuildProgramFiles32)\Microsoft SDKs\Windows\v7.1A\lib;$(LibraryPath) 124 | $(IncludePath) 125 | 126 | 127 | $(MSBuildProgramFiles32)\Microsoft SDKs\Windows\v7.1A\lib;D:\OpenCV\opencv\build\x86\vc16\staticlib\;C:\Users\milesching\Downloads;$(LibraryPath) 128 | D:\OpenCV\opencv\build\include\;$(IncludePath) 129 | 130 | 131 | $(MSBuildProgramFiles32)\Microsoft SDKs\Windows\v7.1A\lib;D:\MyGame\opencv\x86\vc14\lib\Release;D:\MyGame\Billards\cocos2d\external\Box2D\prebuilt\win32\release;$(LibraryPath) 132 | D:\MyGame\Billards\cocos2d\external\Box2D\include;D:\MyGame\opencv\include;D:\OpenGL\glad\include;D:\OpenGL\glfw;D:\OpenGL\glm;$(IncludePath) 133 | 134 | 135 | $(MSBuildProgramFiles32)\Microsoft SDKs\Windows\v7.1A\lib;$(LibraryPath) 136 | C:\WorkSpace\Billards\cocos2d\external\Box2D\include;$(IncludePath) 137 | 138 | 139 | 140 | Disabled 141 | $(EngineRoot);$(EngineRoot)external;$(EngineRoot)cocos\audio\include;$(EngineRoot)external\chipmunk\include\chipmunk;$(EngineRoot)extensions;..\Classes;..;%(AdditionalIncludeDirectories);$(_COCOS_HEADER_WIN32_BEGIN);$(_COCOS_HEADER_WIN32_END);D:\MyGame\Billards\cocos2d\external\Box2D\include;D:\MyGame\opencv\include;D:\OpenGL\glad\include;D:\OpenGL\glfw;D:\OpenGL\glm 142 | WIN32;_DEBUG;_WINDOWS;_USE_MATH_DEFINES;GL_GLEXT_PROTOTYPES;CC_ENABLE_CHIPMUNK_INTEGRATION=1;COCOS2D_DEBUG=1;_CRT_SECURE_NO_WARNINGS;_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) 143 | false 144 | EnableFastChecks 145 | MultiThreadedDebugDLL 146 | 147 | 148 | Level3 149 | EditAndContinue 150 | 4267;4251;4244;%(DisableSpecificWarnings) 151 | true 152 | 153 | 154 | opencv_shape320d.lib;opencv_photo320d.lib;opencv_objdetect320d.lib;opencv_ml320d.lib;opencv_imgproc320d.lib;opencv_imgcodecs320d.lib;opencv_highgui320d.lib;opencv_flann320d.lib;opencv_features2d320d.lib;opencv_core320d.lib;opencv_calib3d320d.lib;opencv_videostab320d.lib;opencv_videoio320d.lib;opencv_video320d.lib;opencv_ts320d.lib;opencv_superres320d.lib;opencv_stitching320d.lib;%(AdditionalDependencies);$(_COCOS_LIB_WIN32_BEGIN);$(_COCOS_LIB_WIN32_END);libbox2d.lib;glfw3.lib 155 | $(OutDir)$(ProjectName).exe 156 | $(OutDir);%(AdditionalLibraryDirectories);$(_COCOS_LIB_PATH_WIN32_BEGIN);$(_COCOS_LIB_PATH_WIN32_END);D:\MyGame\Billards\cocos2d\external\Box2D\prebuilt\win32\debug;D:\MyGame\opencv\x86\vc14\lib\Debug;D:\OpenGL\glfw\lib 157 | true 158 | Windows 159 | MachineX86 160 | 161 | 162 | 163 | 164 | 165 | 166 | 167 | 168 | 169 | 170 | 171 | 172 | Disabled 173 | $(EngineRoot);$(EngineRoot)external;$(EngineRoot)cocos\audio\include;$(EngineRoot)external\chipmunk\include\chipmunk;$(EngineRoot)extensions;..\Classes;..;%(AdditionalIncludeDirectories);$(_COCOS_HEADER_WIN32_BEGIN);$(_COCOS_HEADER_WIN32_END);C:\WorkSpace\Billards\cocos2d\external\Box2D\include 174 | WIN32;_DEBUG;_WINDOWS;_USE_MATH_DEFINES;GL_GLEXT_PROTOTYPES;CC_ENABLE_CHIPMUNK_INTEGRATION=1;COCOS2D_DEBUG=1;_CRT_SECURE_NO_WARNINGS;_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) 175 | false 176 | EnableFastChecks 177 | MultiThreadedDebugDLL 178 | 179 | 180 | Level3 181 | ProgramDatabase 182 | 4267;4251;4244;%(DisableSpecificWarnings) 183 | true 184 | 185 | 186 | %(AdditionalDependencies);$(_COCOS_LIB_WIN32_BEGIN);$(_COCOS_LIB_WIN32_END);libbox2d.lib 187 | $(OutDir)$(ProjectName).exe 188 | $(OutDir);%(AdditionalLibraryDirectories);$(_COCOS_LIB_PATH_WIN32_BEGIN);$(_COCOS_LIB_PATH_WIN32_END);C:\WorkSpace\Billards\cocos2d\external\Box2D\prebuilt\win32\debug 189 | true 190 | Windows 191 | 192 | 193 | 194 | 195 | 196 | 197 | 198 | 199 | 200 | 201 | 202 | 203 | if not exist "$(OutDir)" mkdir "$(OutDir)" 204 | xcopy "$(ProjectDir)..\Resources" "$(OutDir)\Resources\" /D /E /I /F /Y 205 | 206 | $(TargetName).cab 207 | $(TargetFileName) 208 | 209 | 210 | 211 | 212 | MaxSpeed 213 | true 214 | $(EngineRoot);$(EngineRoot)external;$(EngineRoot)cocos\audio\include;$(EngineRoot)external\chipmunk\include\chipmunk;$(EngineRoot)extensions;..\Classes;..;%(AdditionalIncludeDirectories);$(_COCOS_HEADER_WIN32_BEGIN);$(_COCOS_HEADER_WIN32_END);D:\MyGame\Billards\cocos2d\external\Box2D\include;D:\OpenGL\glfw;D:\OpenGL\glm;D:\OpenGL\glad\include 215 | WIN32;NDEBUG;_WINDOWS;_USE_MATH_DEFINES;GL_GLEXT_PROTOTYPES;CC_ENABLE_CHIPMUNK_INTEGRATION=1;_CRT_SECURE_NO_WARNINGS;_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) 216 | MultiThreadedDLL 217 | true 218 | 219 | 220 | Level3 221 | ProgramDatabase 222 | 4267;4251;4244;%(DisableSpecificWarnings) 223 | true 224 | 225 | 226 | opencv_shape320.lib;opencv_photo320.lib;opencv_objdetect320.lib;opencv_ml320.lib;opencv_imgproc320.lib;opencv_imgcodecs320.lib;opencv_highgui320.lib;opencv_flann320.lib;opencv_features2d320.lib;opencv_core320.lib;opencv_calib3d320.lib;opencv_videostab320.lib;opencv_videoio320.lib;opencv_video320.lib;opencv_ts320.lib;opencv_superres320.lib;opencv_stitching320.lib;%(AdditionalDependencies);$(_COCOS_LIB_WIN32_BEGIN);$(_COCOS_LIB_WIN32_END);libbox2d.lib;glfw3.lib 227 | $(OutDir)$(ProjectName).exe 228 | $(OutDir);%(AdditionalLibraryDirectories);$(_COCOS_LIB_PATH_WIN32_BEGIN);$(_COCOS_LIB_PATH_WIN32_END);D:\MyGame\Billards\cocos2d\external\Box2D\prebuilt\win32\release;D:\MyGame\opencv\x86\vc14\lib\Release;D:\OpenGL\glfw\lib 229 | true 230 | Windows 231 | true 232 | true 233 | MachineX86 234 | 235 | 236 | 237 | 238 | 239 | 240 | 241 | 242 | 243 | 244 | 245 | 246 | MaxSpeed 247 | true 248 | $(EngineRoot);$(EngineRoot)external;$(EngineRoot)cocos\audio\include;$(EngineRoot)external\chipmunk\include\chipmunk;$(EngineRoot)extensions;..\Classes;..;%(AdditionalIncludeDirectories);$(_COCOS_HEADER_WIN32_BEGIN);$(_COCOS_HEADER_WIN32_END);C:\WorkSpace\Billards\cocos2d\external\Box2D\include 249 | WIN32;NDEBUG;_WINDOWS;_USE_MATH_DEFINES;GL_GLEXT_PROTOTYPES;CC_ENABLE_CHIPMUNK_INTEGRATION=1;_CRT_SECURE_NO_WARNINGS;_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) 250 | MultiThreadedDLL 251 | true 252 | 253 | 254 | Level3 255 | ProgramDatabase 256 | 4267;4251;4244;%(DisableSpecificWarnings) 257 | true 258 | 259 | 260 | libcurl.lib;%(AdditionalDependencies);$(_COCOS_LIB_WIN32_BEGIN);$(_COCOS_LIB_WIN32_END);libbox2d.lib 261 | $(OutDir)$(ProjectName).exe 262 | $(OutDir);%(AdditionalLibraryDirectories);$(_COCOS_LIB_PATH_WIN32_BEGIN);$(_COCOS_LIB_PATH_WIN32_END);C:\WorkSpace\Billards\cocos2d\external\Box2D\prebuilt\win32\debug 263 | true 264 | Windows 265 | true 266 | true 267 | 268 | 269 | 270 | 271 | 272 | 273 | 274 | 275 | 276 | 277 | 278 | 279 | {98a51ba8-fc3a-415b-ac8f-8c7bd464e93e} 280 | false 281 | 282 | 283 | {b7c2a162-dec9-4418-972e-240ab3cbfcae} 284 | 285 | 286 | 287 | 288 | 289 | 290 | 291 | 292 | 293 | 294 | 295 | 296 | 297 | 298 | 299 | 300 | 301 | 302 | 303 | 304 | 305 | 306 | 307 | 308 | 309 | 310 | 311 | 312 | 313 | 314 | 315 | 316 | 317 | 318 | 319 | 320 | 321 | 322 | 323 | 324 | 325 | 326 | 327 | 这台计算机上缺少此项目引用的 NuGet 程序包。使用“NuGet 程序包还原”可下载这些程序包。有关更多信息,请参见 http://go.microsoft.com/fwlink/?LinkID=322105。缺少的文件是 {0}。 328 | 329 | 330 | 331 | -------------------------------------------------------------------------------- /Code/Billards.vcxproj.filters: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | {84a8ebd7-7cf0-47f6-b75e-d441df67da40} 6 | 7 | 8 | {715254bc-d70b-4ec5-bf29-467dd3ace079} 9 | 10 | 11 | {bb6c862e-70e9-49d9-81b7-3829a6f50471} 12 | 13 | 14 | 15 | 16 | resource 17 | 18 | 19 | 20 | 21 | win32 22 | 23 | 24 | win32 25 | 26 | 27 | win32 28 | 29 | 30 | win32 31 | 32 | 33 | win32 34 | 35 | 36 | win32 37 | 38 | 39 | win32 40 | 41 | 42 | win32 43 | 44 | 45 | win32 46 | 47 | 48 | win32 49 | 50 | 51 | win32 52 | 53 | 54 | win32 55 | 56 | 57 | win32 58 | 59 | 60 | 61 | 62 | win32 63 | 64 | 65 | win32 66 | 67 | 68 | win32 69 | 70 | 71 | win32 72 | 73 | 74 | win32 75 | 76 | 77 | win32 78 | 79 | 80 | win32 81 | 82 | 83 | win32 84 | 85 | 86 | win32 87 | 88 | 89 | win32 90 | 91 | 92 | win32 93 | 94 | 95 | win32 96 | 97 | 98 | win32 99 | 100 | 101 | win32 102 | 103 | 104 | win32 105 | 106 | 107 | win32 108 | 109 | 110 | win32 111 | 112 | 113 | -------------------------------------------------------------------------------- /Code/Billards.vcxproj.user: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | $(ProjectDir)..\Resources 5 | WindowsLocalDebugger 6 | 7 | 8 | $(ProjectDir)..\Resources 9 | WindowsLocalDebugger 10 | 11 | 12 | $(ProjectDir)..\Resources 13 | WindowsLocalDebugger 14 | 15 | 16 | $(ProjectDir)..\Resources 17 | WindowsLocalDebugger 18 | 19 | -------------------------------------------------------------------------------- /Code/CollisionDetector.cpp: -------------------------------------------------------------------------------- 1 | #include "CollisionDetector.h" 2 | #include "SimpleAudioEngine.h" 3 | 4 | USING_NS_CC; 5 | 6 | void CollisonDetector::BeginContact(b2Contact* contact) 7 | { 8 | b2Body* bodyA = contact->GetFixtureA()->GetBody(); 9 | b2Body* bodyB = contact->GetFixtureB()->GetBody(); 10 | 11 | Sprite2D* spriteA = (Sprite2D*)bodyA->GetUserData(); 12 | Sprite2D* spriteB = (Sprite2D*)bodyB->GetUserData(); 13 | 14 | if (spriteA && spriteB){ 15 | /**contact event**/ 16 | 17 | } 18 | return; 19 | } 20 | 21 | 22 | -------------------------------------------------------------------------------- /Code/CollisionDetector.h: -------------------------------------------------------------------------------- 1 | 2 | 3 | #ifndef _COLLISION_HERO_H 4 | 5 | #define _COLLISION_HERO_H 6 | #include "cocos2d.h" 7 | #include "Sprite2D.h" 8 | #include "Box2D/Box2D.h" 9 | 10 | 11 | class CollisonDetector : public b2ContactListener 12 | { 13 | public: 14 | virtual void BeginContact(b2Contact* contact); 15 | //virtual void EndContact(b2Contact* contact); 16 | //virtual void PreSolve(b2Contact* contact, const b2Manifold* oldManifold); 17 | //virtual void EndContact(b2Contact* contact); 18 | }; 19 | #endif -------------------------------------------------------------------------------- /Code/EnumClass.h: -------------------------------------------------------------------------------- 1 | #ifndef _ENUMCLASS 2 | #define _ENUMCLASS 3 | enum typeNum { 4 | left, 5 | right, 6 | mid, 7 | text 8 | }; 9 | 10 | #endif // !_ENUMCLASS 11 | 12 | -------------------------------------------------------------------------------- /Code/GlobalVar.h: -------------------------------------------------------------------------------- 1 | #ifndef __CLOBAL__ 2 | #define __CLOBAL__ 3 | #include 4 | #include "ray_tracing.h" 5 | //#include "OpenGLDraw.h" 6 | 7 | extern cv::Mat view_global; 8 | extern ray_tracing_controller rtc; 9 | 10 | extern float ball_positions[10][3]; 11 | extern float camera_eye[3]; 12 | extern float camera_look_at[3]; 13 | extern float ball_rotateAngle[10]; 14 | extern float ball_rotateVec[10][3]; 15 | extern bool ball_selected[10]; 16 | extern bool ball_die[10]; 17 | 18 | extern float shadow_factor[VIEW_ROW][VIEW_COL]; 19 | extern float sample_results[VIEW_ROW][VIEW_COL][3]; 20 | extern int nowHero; 21 | #endif -------------------------------------------------------------------------------- /Code/HeroChoice.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ganler/bimulator/9021a3aa72b394bad552fedb4b68dfec135e08e4/Code/HeroChoice.cpp -------------------------------------------------------------------------------- /Code/HeroChoice.h: -------------------------------------------------------------------------------- 1 | 2 | 3 | #ifndef _CHOICE_HERO_H 4 | 5 | #define _CHOICE_HERO_H 6 | #include "cocos2d.h" 7 | #include "EnumClass.h" 8 | 9 | class HeroChoice : public cocos2d::Layer 10 | { 11 | public: 12 | virtual bool init(); 13 | CREATE_FUNC(HeroChoice); 14 | static cocos2d::Scene* scene(); 15 | void clickDownAction(typeNum _type); 16 | void update(); 17 | private: 18 | 19 | 20 | }; 21 | 22 | #endif -------------------------------------------------------------------------------- /Code/HeroChoice.obj: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ganler/bimulator/9021a3aa72b394bad552fedb4b68dfec135e08e4/Code/HeroChoice.obj -------------------------------------------------------------------------------- /Code/NormalDefine.h: -------------------------------------------------------------------------------- 1 | #ifndef _NORMALDEFINE 2 | #define _NORMALDEFINE 3 | 4 | #include 5 | #define PTM_RATIO 32.0f 6 | #define BALL_RADIUS 3.0f 7 | #define MAX_BALL 10 8 | #define ROUND 3 9 | #define TABLE_WIDTH 250 10 | #define TABLE_HEIGHT 130 11 | 12 | #define SCREEN_WIDTH 800 13 | #define SCREEN_HEIGHT 600 14 | 15 | #define Pi acos(-1) 16 | 17 | struct MyVec3 { 18 | float x, y, z; 19 | MyVec3(int _x = 0, int _y = 0, int _z = 0) 20 | :x(_x), y(_y), z(_z){} 21 | }; 22 | 23 | #endif // !_NORMALDEFINE 24 | -------------------------------------------------------------------------------- /Code/OpenGLDraw.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ganler/bimulator/9021a3aa72b394bad552fedb4b68dfec135e08e4/Code/OpenGLDraw.cpp -------------------------------------------------------------------------------- /Code/OpenGLDraw.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ganler/bimulator/9021a3aa72b394bad552fedb4b68dfec135e08e4/Code/OpenGLDraw.h -------------------------------------------------------------------------------- /Code/Paddle.cpp: -------------------------------------------------------------------------------- 1 | #include "Paddle.h" 2 | #include "SimpleAudioEngine.h" 3 | 4 | USING_NS_CC; 5 | 6 | 7 | 8 | void Paddle::setParentScene(HeroChoice* _pscene) 9 | { 10 | hScene = _pscene; 11 | return; 12 | } 13 | 14 | Paddle* Paddle::paddleWithTexture(Texture2D* pTexture, typeNum _type) 15 | { 16 | 17 | Paddle* pPaddle = new Paddle; 18 | pPaddle->initWithTexture(pTexture); 19 | pPaddle->typeNumber = _type; 20 | return pPaddle; 21 | } 22 | 23 | void Paddle::mouseClickListener() 24 | { 25 | auto _dispatcher = Director::getInstance()->getEventDispatcher(); 26 | auto Lister = EventListenerMouse::create(); 27 | Lister->onMouseDown = [=](Event * event) 28 | { 29 | 30 | EventMouse* e = (EventMouse*)event; 31 | Vec2 posXY = getPosition(); 32 | Rect square = getBoundingBox(); 33 | if (square.containsPoint(Vec2(e->getCursorX(), e->getCursorY()))) { 34 | hScene->clickDownAction(typeNumber); 35 | } 36 | 37 | }; 38 | Lister->onMouseUp = [=](Event * event) 39 | { 40 | 41 | }; 42 | Lister->onMouseMove = [=](Event * event) 43 | { 44 | 45 | }; 46 | 47 | _dispatcher->addEventListenerWithSceneGraphPriority(Lister, this); 48 | return; 49 | } 50 | 51 | -------------------------------------------------------------------------------- /Code/Paddle.h: -------------------------------------------------------------------------------- 1 | #ifndef _PADDLE_STRUCT 2 | #define _PADDLE_STRUCT 3 | 4 | #include "cocos2d.h" 5 | #include "HeroChoice.h" 6 | #include "EnumClass.h" 7 | 8 | class Paddle :public cocos2d::Sprite 9 | { 10 | public: 11 | typeNum typeNumber; 12 | HeroChoice* hScene; 13 | 14 | 15 | static Paddle* paddleWithTexture(cocos2d::Texture2D* pTexture, typeNum _type); 16 | void mouseClickListener(); 17 | void setParentScene(HeroChoice* _pscene); 18 | }; 19 | #endif -------------------------------------------------------------------------------- /Code/Sprite2D.cpp: -------------------------------------------------------------------------------- 1 | #include "Sprite2D.h" 2 | 3 | USING_NS_CC; 4 | Sprite2D::Sprite2D(b2World* game, int type) { 5 | setGame(game); 6 | setType(type); 7 | } 8 | 9 | void Sprite2D::setSpritePosition(Vec2 position) { 10 | setPosition(position); 11 | 12 | if (getBody()) { 13 | getBody()->SetTransform(b2Vec2( 14 | position.x / PTM_RATIO, 15 | position.y / PTM_RATIO), 16 | getBody()->GetAngle()); 17 | } 18 | } 19 | 20 | void Sprite2D::update(float dt) { 21 | 22 | if (getBody()) { 23 | setPosition(getBody()->GetPosition().x * PTM_RATIO, getBody()->GetPosition().y * PTM_RATIO); 24 | //setRotation(CC_RADIANS_TO_DEGREES(-1 * _body->GetAngle())); 25 | } 26 | } 27 | 28 | void Sprite2D::reset() { 29 | if (getBody()) { 30 | getBody()->SetLinearVelocity(b2Vec2_zero); 31 | getBody()->SetAngularVelocity(0); 32 | getBody()->SetAwake(true); 33 | } 34 | return; 35 | } 36 | 37 | -------------------------------------------------------------------------------- /Code/Sprite2D.h: -------------------------------------------------------------------------------- 1 | #ifndef __SPRITE2D__ 2 | #define __SPRITE2D__ 3 | 4 | 5 | #include "cocos2d.h" 6 | #include "Box2D/Box2D.h" 7 | #include "NormalDefine.h" 8 | 9 | USING_NS_CC; 10 | 11 | class Sprite2D : public Sprite { 12 | public: 13 | Sprite2D(b2World* game, int type); 14 | 15 | CC_SYNTHESIZE(b2Body*, _body, Body); 16 | CC_SYNTHESIZE(b2World*, _game, Game); 17 | CC_SYNTHESIZE(int, _type, Type); 18 | 19 | virtual void setSpritePosition(Vec2 position); 20 | virtual void update(float dt); 21 | virtual void reset(); 22 | }; 23 | 24 | 25 | 26 | #endif -------------------------------------------------------------------------------- /Code/crossable_amp.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include 3 | #include 4 | #include "ray_tracing_tools_amp.h" 5 | 6 | using namespace concurrency; 7 | using namespace concurrency::fast_math; 8 | using namespace concurrency::graphics; 9 | 10 | namespace ray_tracing { 11 | 12 | inline bool cant_cross_bbox(const float_3& b_max, const float_3& b_min, 13 | const float_3& dir, const float_3& at) restrict(amp) { 14 | if (dir.x > 0) { if (at.x > b_max.x) return true; } 15 | else { if (at.x < b_min.x) return true; } 16 | if (dir.y > 0) { if (at.y > b_max.y) return true; } 17 | else { if (at.y < b_min.y) return true; } 18 | if (dir.z > 0) { if (at.z > b_max.z) return true; } 19 | else { if (at.z < b_min.z) return true; } 20 | return false; 21 | } 22 | 23 | struct material { 24 | float ka; 25 | float kd; 26 | float ks; 27 | float shininess; 28 | float_3 color; 29 | inline float brdf(const float_3& in, const float_3& out, const float_3& normal) const restrict(amp) { 30 | float_3 h = normalize(out - in); 31 | float d = dot(h, normal); 32 | if (d <= 0.0f) return 0.0f; 33 | return ks * pow(d, shininess); 34 | } 35 | }; 36 | 37 | struct point_light { 38 | float_3 loc, intensity; 39 | float a_0, a_1, a_2; 40 | inline float_3 get_intensity(const float_3& at, const float_3& normal, 41 | const float_3& view_dir, const material& material) const restrict(amp) { 42 | float_3 light = loc - at; 43 | float_3 light_dir = normalize(light); 44 | float_3 ambient = material.ka * intensity; 45 | float_3 diffuse = material.kd * fmaxf(dot(normal, light_dir), 0.0f) * intensity; 46 | float_3 h = normalize(view_dir + light_dir); 47 | float_3 specular = material.ka * material.ks * 48 | powf(fmaxf(dot(h, normal), 0.0f), material.shininess) * intensity; 49 | float distance = length(light); 50 | //float attentuation = 1.0f / (a_0 + a_1 * distance + a_2 * distance * distance); 51 | return (ambient + diffuse + specular) * material.color;//* attentuation; 52 | } 53 | }; 54 | 55 | 56 | 57 | struct triangle { 58 | float_3 a, b, c; 59 | float_3 n; 60 | uint material_id; 61 | float_3 b_max; 62 | float_3 b_min; 63 | inline bool check_cross(const float_3& original_point, 64 | const float_3& dir, float& alpha) const restrict(amp) { 65 | //if (cant_cross_bbox(triangle.b_max, triangle.b_min, dir, original_point)) return false; 66 | //https://www.cnblogs.com/graphics/archive/2010/08/09/1795348.html 67 | float_3 e1 = b - a; 68 | float_3 e2 = c - a; 69 | float_3 p = cross(dir, e2); 70 | float det = dot(e1, p); 71 | float_3 t; 72 | if (det > 0) t = original_point - a; 73 | else { 74 | t = a - original_point; 75 | det = -det; 76 | } 77 | if (det < 0.001f) return false; 78 | float u = dot(t, p); 79 | if (u < 0.0f || u > det) return false; 80 | float_3 q = cross(t, e1); 81 | float v = dot(dir, q); 82 | if (v < 0.0f || u + v > det) return false; 83 | alpha = dot(e2, q) / det; 84 | return alpha > 0; 85 | } 86 | }; 87 | 88 | 89 | 90 | struct sphere { 91 | float_3 o; 92 | float r; 93 | uint material_id; 94 | uint visible; 95 | //float_3 b_max; 96 | //float_3 b_min; 97 | inline bool check_cross(const float_3& original_point, const float_3& dir, 98 | float& alpha, float current_alpha) const restrict(amp) { 99 | if (visible == 0) return false; 100 | //if (cant_cross_bbox(sphere.b_max, sphere.b_min, dir, original_point)) return false; 101 | //https://www.cnblogs.com/yoyo-sincerely/p/8401861.html 102 | float_3 eo = o - original_point; 103 | float v = dot(eo, dir); 104 | if (v - r >= current_alpha) return false; 105 | float v_2 = v * v; 106 | alpha = r * r + v_2 - dot(eo, eo); 107 | if (alpha < 0.0f || v_2 < alpha) return false; 108 | alpha = v - sqrtf(alpha); 109 | return alpha >= 0.0f; 110 | } 111 | }; 112 | 113 | inline float_3 get_normal(const sphere& sphere, const float_3& at) restrict(amp) { 114 | return normalize(at - sphere.o); 115 | //TODO: WENXIN 116 | } 117 | } 118 | -------------------------------------------------------------------------------- /Code/game.rc: -------------------------------------------------------------------------------- 1 | // Microsoft Visual C++ generated resource script. 2 | // 3 | #include "resource.h" 4 | 5 | #define APSTUDIO_READONLY_SYMBOLS 6 | ///////////////////////////////////////////////////////////////////////////// 7 | // 8 | // Generated from the TEXTINCLUDE 2 resource. 9 | // 10 | #define APSTUDIO_HIDDEN_SYMBOLS 11 | #include "windows.h" 12 | #undef APSTUDIO_HIDDEN_SYMBOLS 13 | ///////////////////////////////////////////////////////////////////////////// 14 | #undef APSTUDIO_READONLY_SYMBOLS 15 | 16 | ///////////////////////////////////////////////////////////////////////////// 17 | // English (U.S.) resources 18 | 19 | #if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) 20 | #ifdef _WIN32 21 | LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US 22 | #pragma code_page(1252) 23 | #endif //_WIN32 24 | 25 | #ifdef APSTUDIO_INVOKED 26 | ///////////////////////////////////////////////////////////////////////////// 27 | // 28 | // TEXTINCLUDE 29 | // 30 | 31 | 1 TEXTINCLUDE 32 | BEGIN 33 | "resource.h\0" 34 | END 35 | 36 | #endif // APSTUDIO_INVOKED 37 | 38 | ///////////////////////////////////////////////////////////////////////////// 39 | // 40 | // Icon 41 | // 42 | 43 | // Icon with lowest ID value placed first to ensure application icon 44 | // remains consistent on all systems. 45 | GLFW_ICON ICON "res\\game.ico" 46 | 47 | ///////////////////////////////////////////////////////////////////////////// 48 | // 49 | // Version 50 | // 51 | 52 | VS_VERSION_INFO VERSIONINFO 53 | FILEVERSION 1,0,0,1 54 | PRODUCTVERSION 1,0,0,1 55 | FILEFLAGSMASK 0x3fL 56 | #ifdef _DEBUG 57 | FILEFLAGS 0x1L 58 | #else 59 | FILEFLAGS 0x0L 60 | #endif 61 | FILEOS 0x4L 62 | FILETYPE 0x2L 63 | FILESUBTYPE 0x0L 64 | BEGIN 65 | BLOCK "StringFileInfo" 66 | BEGIN 67 | BLOCK "040904B0" 68 | BEGIN 69 | VALUE "CompanyName", "\0" 70 | VALUE "FileDescription", "game Module\0" 71 | VALUE "FileVersion", "1, 0, 0, 1\0" 72 | VALUE "InternalName", "game\0" 73 | VALUE "LegalCopyright", "Copyright \0" 74 | VALUE "OriginalFilename", "game.exe\0" 75 | VALUE "ProductName", "game Module\0" 76 | VALUE "ProductVersion", "1, 0, 0, 1\0" 77 | END 78 | END 79 | BLOCK "VarFileInfo" 80 | BEGIN 81 | VALUE "Translation", 0x0409, 0x04B0 82 | END 83 | END 84 | 85 | ///////////////////////////////////////////////////////////////////////////// 86 | #endif // !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) 87 | -------------------------------------------------------------------------------- /Code/glad.c: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | OpenGL loader generated by glad 0.1.33 on Thu Dec 12 18:06:44 2019. 4 | 5 | Language/Generator: C/C++ 6 | Specification: gl 7 | APIs: gl=3.3 8 | Profile: core 9 | Extensions: 10 | 11 | Loader: True 12 | Local files: False 13 | Omit khrplatform: False 14 | Reproducible: False 15 | 16 | Commandline: 17 | --profile="core" --api="gl=3.3" --generator="c" --spec="gl" --extensions="" 18 | Online: 19 | https://glad.dav1d.de/#profile=core&language=c&specification=gl&loader=on&api=gl%3D3.3 20 | */ 21 | 22 | #include 23 | #include 24 | #include 25 | #include 26 | 27 | static void* get_proc(const char *namez); 28 | 29 | #if defined(_WIN32) || defined(__CYGWIN__) 30 | #ifndef _WINDOWS_ 31 | #undef APIENTRY 32 | #endif 33 | #include 34 | static HMODULE libGL; 35 | 36 | typedef void* (APIENTRYP PFNWGLGETPROCADDRESSPROC_PRIVATE)(const char*); 37 | static PFNWGLGETPROCADDRESSPROC_PRIVATE gladGetProcAddressPtr; 38 | 39 | #ifdef _MSC_VER 40 | #ifdef __has_include 41 | #if __has_include() 42 | #define HAVE_WINAPIFAMILY 1 43 | #endif 44 | #elif _MSC_VER >= 1700 && !_USING_V110_SDK71_ 45 | #define HAVE_WINAPIFAMILY 1 46 | #endif 47 | #endif 48 | 49 | #ifdef HAVE_WINAPIFAMILY 50 | #include 51 | #if !WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) && WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP) 52 | #define IS_UWP 1 53 | #endif 54 | #endif 55 | 56 | static 57 | int open_gl(void) { 58 | #ifndef IS_UWP 59 | libGL = LoadLibraryW(L"opengl32.dll"); 60 | if(libGL != NULL) { 61 | void (* tmp)(void); 62 | tmp = (void(*)(void)) GetProcAddress(libGL, "wglGetProcAddress"); 63 | gladGetProcAddressPtr = (PFNWGLGETPROCADDRESSPROC_PRIVATE) tmp; 64 | return gladGetProcAddressPtr != NULL; 65 | } 66 | #endif 67 | 68 | return 0; 69 | } 70 | 71 | static 72 | void close_gl(void) { 73 | if(libGL != NULL) { 74 | FreeLibrary((HMODULE) libGL); 75 | libGL = NULL; 76 | } 77 | } 78 | #else 79 | #include 80 | static void* libGL; 81 | 82 | #if !defined(__APPLE__) && !defined(__HAIKU__) 83 | typedef void* (APIENTRYP PFNGLXGETPROCADDRESSPROC_PRIVATE)(const char*); 84 | static PFNGLXGETPROCADDRESSPROC_PRIVATE gladGetProcAddressPtr; 85 | #endif 86 | 87 | static 88 | int open_gl(void) { 89 | #ifdef __APPLE__ 90 | static const char *NAMES[] = { 91 | "../Frameworks/OpenGL.framework/OpenGL", 92 | "/Library/Frameworks/OpenGL.framework/OpenGL", 93 | "/System/Library/Frameworks/OpenGL.framework/OpenGL", 94 | "/System/Library/Frameworks/OpenGL.framework/Versions/Current/OpenGL" 95 | }; 96 | #else 97 | static const char *NAMES[] = {"libGL.so.1", "libGL.so"}; 98 | #endif 99 | 100 | unsigned int index = 0; 101 | for(index = 0; index < (sizeof(NAMES) / sizeof(NAMES[0])); index++) { 102 | libGL = dlopen(NAMES[index], RTLD_NOW | RTLD_GLOBAL); 103 | 104 | if(libGL != NULL) { 105 | #if defined(__APPLE__) || defined(__HAIKU__) 106 | return 1; 107 | #else 108 | gladGetProcAddressPtr = (PFNGLXGETPROCADDRESSPROC_PRIVATE)dlsym(libGL, 109 | "glXGetProcAddressARB"); 110 | return gladGetProcAddressPtr != NULL; 111 | #endif 112 | } 113 | } 114 | 115 | return 0; 116 | } 117 | 118 | static 119 | void close_gl(void) { 120 | if(libGL != NULL) { 121 | dlclose(libGL); 122 | libGL = NULL; 123 | } 124 | } 125 | #endif 126 | 127 | static 128 | void* get_proc(const char *namez) { 129 | void* result = NULL; 130 | if(libGL == NULL) return NULL; 131 | 132 | #if !defined(__APPLE__) && !defined(__HAIKU__) 133 | if(gladGetProcAddressPtr != NULL) { 134 | result = gladGetProcAddressPtr(namez); 135 | } 136 | #endif 137 | if(result == NULL) { 138 | #if defined(_WIN32) || defined(__CYGWIN__) 139 | result = (void*)GetProcAddress((HMODULE) libGL, namez); 140 | #else 141 | result = dlsym(libGL, namez); 142 | #endif 143 | } 144 | 145 | return result; 146 | } 147 | 148 | int gladLoadGL(void) { 149 | int status = 0; 150 | 151 | if(open_gl()) { 152 | status = gladLoadGLLoader(&get_proc); 153 | close_gl(); 154 | } 155 | 156 | return status; 157 | } 158 | 159 | struct gladGLversionStruct GLVersion = { 0, 0 }; 160 | 161 | #if defined(GL_ES_VERSION_3_0) || defined(GL_VERSION_3_0) 162 | #define _GLAD_IS_SOME_NEW_VERSION 1 163 | #endif 164 | 165 | static int max_loaded_major; 166 | static int max_loaded_minor; 167 | 168 | static const char *exts = NULL; 169 | static int num_exts_i = 0; 170 | static char **exts_i = NULL; 171 | 172 | static int get_exts(void) { 173 | #ifdef _GLAD_IS_SOME_NEW_VERSION 174 | if(max_loaded_major < 3) { 175 | #endif 176 | exts = (const char *)glGetString(GL_EXTENSIONS); 177 | #ifdef _GLAD_IS_SOME_NEW_VERSION 178 | } else { 179 | unsigned int index; 180 | 181 | num_exts_i = 0; 182 | glGetIntegerv(GL_NUM_EXTENSIONS, &num_exts_i); 183 | if (num_exts_i > 0) { 184 | exts_i = (char **)malloc((size_t)num_exts_i * (sizeof *exts_i)); 185 | } 186 | 187 | if (exts_i == NULL) { 188 | return 0; 189 | } 190 | 191 | for(index = 0; index < (unsigned)num_exts_i; index++) { 192 | const char *gl_str_tmp = (const char*)glGetStringi(GL_EXTENSIONS, index); 193 | size_t len = strlen(gl_str_tmp); 194 | 195 | char *local_str = (char*)malloc((len+1) * sizeof(char)); 196 | if(local_str != NULL) { 197 | memcpy(local_str, gl_str_tmp, (len+1) * sizeof(char)); 198 | } 199 | exts_i[index] = local_str; 200 | } 201 | } 202 | #endif 203 | return 1; 204 | } 205 | 206 | static void free_exts(void) { 207 | if (exts_i != NULL) { 208 | int index; 209 | for(index = 0; index < num_exts_i; index++) { 210 | free((char *)exts_i[index]); 211 | } 212 | free((void *)exts_i); 213 | exts_i = NULL; 214 | } 215 | } 216 | 217 | static int has_ext(const char *ext) { 218 | #ifdef _GLAD_IS_SOME_NEW_VERSION 219 | if(max_loaded_major < 3) { 220 | #endif 221 | const char *extensions; 222 | const char *loc; 223 | const char *terminator; 224 | extensions = exts; 225 | if(extensions == NULL || ext == NULL) { 226 | return 0; 227 | } 228 | 229 | while(1) { 230 | loc = strstr(extensions, ext); 231 | if(loc == NULL) { 232 | return 0; 233 | } 234 | 235 | terminator = loc + strlen(ext); 236 | if((loc == extensions || *(loc - 1) == ' ') && 237 | (*terminator == ' ' || *terminator == '\0')) { 238 | return 1; 239 | } 240 | extensions = terminator; 241 | } 242 | #ifdef _GLAD_IS_SOME_NEW_VERSION 243 | } else { 244 | int index; 245 | if(exts_i == NULL) return 0; 246 | for(index = 0; index < num_exts_i; index++) { 247 | const char *e = exts_i[index]; 248 | 249 | if(exts_i[index] != NULL && strcmp(e, ext) == 0) { 250 | return 1; 251 | } 252 | } 253 | } 254 | #endif 255 | 256 | return 0; 257 | } 258 | int GLAD_GL_VERSION_1_0 = 0; 259 | int GLAD_GL_VERSION_1_1 = 0; 260 | int GLAD_GL_VERSION_1_2 = 0; 261 | int GLAD_GL_VERSION_1_3 = 0; 262 | int GLAD_GL_VERSION_1_4 = 0; 263 | int GLAD_GL_VERSION_1_5 = 0; 264 | int GLAD_GL_VERSION_2_0 = 0; 265 | int GLAD_GL_VERSION_2_1 = 0; 266 | int GLAD_GL_VERSION_3_0 = 0; 267 | int GLAD_GL_VERSION_3_1 = 0; 268 | int GLAD_GL_VERSION_3_2 = 0; 269 | int GLAD_GL_VERSION_3_3 = 0; 270 | PFNGLACTIVETEXTUREPROC glad_glActiveTexture = NULL; 271 | PFNGLATTACHSHADERPROC glad_glAttachShader = NULL; 272 | PFNGLBEGINCONDITIONALRENDERPROC glad_glBeginConditionalRender = NULL; 273 | PFNGLBEGINQUERYPROC glad_glBeginQuery = NULL; 274 | PFNGLBEGINTRANSFORMFEEDBACKPROC glad_glBeginTransformFeedback = NULL; 275 | PFNGLBINDATTRIBLOCATIONPROC glad_glBindAttribLocation = NULL; 276 | PFNGLBINDBUFFERPROC glad_glBindBuffer = NULL; 277 | PFNGLBINDBUFFERBASEPROC glad_glBindBufferBase = NULL; 278 | PFNGLBINDBUFFERRANGEPROC glad_glBindBufferRange = NULL; 279 | PFNGLBINDFRAGDATALOCATIONPROC glad_glBindFragDataLocation = NULL; 280 | PFNGLBINDFRAGDATALOCATIONINDEXEDPROC glad_glBindFragDataLocationIndexed = NULL; 281 | PFNGLBINDFRAMEBUFFERPROC glad_glBindFramebuffer = NULL; 282 | PFNGLBINDRENDERBUFFERPROC glad_glBindRenderbuffer = NULL; 283 | PFNGLBINDSAMPLERPROC glad_glBindSampler = NULL; 284 | PFNGLBINDTEXTUREPROC glad_glBindTexture = NULL; 285 | PFNGLBINDVERTEXARRAYPROC glad_glBindVertexArray = NULL; 286 | PFNGLBLENDCOLORPROC glad_glBlendColor = NULL; 287 | PFNGLBLENDEQUATIONPROC glad_glBlendEquation = NULL; 288 | PFNGLBLENDEQUATIONSEPARATEPROC glad_glBlendEquationSeparate = NULL; 289 | PFNGLBLENDFUNCPROC glad_glBlendFunc = NULL; 290 | PFNGLBLENDFUNCSEPARATEPROC glad_glBlendFuncSeparate = NULL; 291 | PFNGLBLITFRAMEBUFFERPROC glad_glBlitFramebuffer = NULL; 292 | PFNGLBUFFERDATAPROC glad_glBufferData = NULL; 293 | PFNGLBUFFERSUBDATAPROC glad_glBufferSubData = NULL; 294 | PFNGLCHECKFRAMEBUFFERSTATUSPROC glad_glCheckFramebufferStatus = NULL; 295 | PFNGLCLAMPCOLORPROC glad_glClampColor = NULL; 296 | PFNGLCLEARPROC glad_glClear = NULL; 297 | PFNGLCLEARBUFFERFIPROC glad_glClearBufferfi = NULL; 298 | PFNGLCLEARBUFFERFVPROC glad_glClearBufferfv = NULL; 299 | PFNGLCLEARBUFFERIVPROC glad_glClearBufferiv = NULL; 300 | PFNGLCLEARBUFFERUIVPROC glad_glClearBufferuiv = NULL; 301 | PFNGLCLEARCOLORPROC glad_glClearColor = NULL; 302 | PFNGLCLEARDEPTHPROC glad_glClearDepth = NULL; 303 | PFNGLCLEARSTENCILPROC glad_glClearStencil = NULL; 304 | PFNGLCLIENTWAITSYNCPROC glad_glClientWaitSync = NULL; 305 | PFNGLCOLORMASKPROC glad_glColorMask = NULL; 306 | PFNGLCOLORMASKIPROC glad_glColorMaski = NULL; 307 | PFNGLCOLORP3UIPROC glad_glColorP3ui = NULL; 308 | PFNGLCOLORP3UIVPROC glad_glColorP3uiv = NULL; 309 | PFNGLCOLORP4UIPROC glad_glColorP4ui = NULL; 310 | PFNGLCOLORP4UIVPROC glad_glColorP4uiv = NULL; 311 | PFNGLCOMPILESHADERPROC glad_glCompileShader = NULL; 312 | PFNGLCOMPRESSEDTEXIMAGE1DPROC glad_glCompressedTexImage1D = NULL; 313 | PFNGLCOMPRESSEDTEXIMAGE2DPROC glad_glCompressedTexImage2D = NULL; 314 | PFNGLCOMPRESSEDTEXIMAGE3DPROC glad_glCompressedTexImage3D = NULL; 315 | PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC glad_glCompressedTexSubImage1D = NULL; 316 | PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC glad_glCompressedTexSubImage2D = NULL; 317 | PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC glad_glCompressedTexSubImage3D = NULL; 318 | PFNGLCOPYBUFFERSUBDATAPROC glad_glCopyBufferSubData = NULL; 319 | PFNGLCOPYTEXIMAGE1DPROC glad_glCopyTexImage1D = NULL; 320 | PFNGLCOPYTEXIMAGE2DPROC glad_glCopyTexImage2D = NULL; 321 | PFNGLCOPYTEXSUBIMAGE1DPROC glad_glCopyTexSubImage1D = NULL; 322 | PFNGLCOPYTEXSUBIMAGE2DPROC glad_glCopyTexSubImage2D = NULL; 323 | PFNGLCOPYTEXSUBIMAGE3DPROC glad_glCopyTexSubImage3D = NULL; 324 | PFNGLCREATEPROGRAMPROC glad_glCreateProgram = NULL; 325 | PFNGLCREATESHADERPROC glad_glCreateShader = NULL; 326 | PFNGLCULLFACEPROC glad_glCullFace = NULL; 327 | PFNGLDELETEBUFFERSPROC glad_glDeleteBuffers = NULL; 328 | PFNGLDELETEFRAMEBUFFERSPROC glad_glDeleteFramebuffers = NULL; 329 | PFNGLDELETEPROGRAMPROC glad_glDeleteProgram = NULL; 330 | PFNGLDELETEQUERIESPROC glad_glDeleteQueries = NULL; 331 | PFNGLDELETERENDERBUFFERSPROC glad_glDeleteRenderbuffers = NULL; 332 | PFNGLDELETESAMPLERSPROC glad_glDeleteSamplers = NULL; 333 | PFNGLDELETESHADERPROC glad_glDeleteShader = NULL; 334 | PFNGLDELETESYNCPROC glad_glDeleteSync = NULL; 335 | PFNGLDELETETEXTURESPROC glad_glDeleteTextures = NULL; 336 | PFNGLDELETEVERTEXARRAYSPROC glad_glDeleteVertexArrays = NULL; 337 | PFNGLDEPTHFUNCPROC glad_glDepthFunc = NULL; 338 | PFNGLDEPTHMASKPROC glad_glDepthMask = NULL; 339 | PFNGLDEPTHRANGEPROC glad_glDepthRange = NULL; 340 | PFNGLDETACHSHADERPROC glad_glDetachShader = NULL; 341 | PFNGLDISABLEPROC glad_glDisable = NULL; 342 | PFNGLDISABLEVERTEXATTRIBARRAYPROC glad_glDisableVertexAttribArray = NULL; 343 | PFNGLDISABLEIPROC glad_glDisablei = NULL; 344 | PFNGLDRAWARRAYSPROC glad_glDrawArrays = NULL; 345 | PFNGLDRAWARRAYSINSTANCEDPROC glad_glDrawArraysInstanced = NULL; 346 | PFNGLDRAWBUFFERPROC glad_glDrawBuffer = NULL; 347 | PFNGLDRAWBUFFERSPROC glad_glDrawBuffers = NULL; 348 | PFNGLDRAWELEMENTSPROC glad_glDrawElements = NULL; 349 | PFNGLDRAWELEMENTSBASEVERTEXPROC glad_glDrawElementsBaseVertex = NULL; 350 | PFNGLDRAWELEMENTSINSTANCEDPROC glad_glDrawElementsInstanced = NULL; 351 | PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC glad_glDrawElementsInstancedBaseVertex = NULL; 352 | PFNGLDRAWRANGEELEMENTSPROC glad_glDrawRangeElements = NULL; 353 | PFNGLDRAWRANGEELEMENTSBASEVERTEXPROC glad_glDrawRangeElementsBaseVertex = NULL; 354 | PFNGLENABLEPROC glad_glEnable = NULL; 355 | PFNGLENABLEVERTEXATTRIBARRAYPROC glad_glEnableVertexAttribArray = NULL; 356 | PFNGLENABLEIPROC glad_glEnablei = NULL; 357 | PFNGLENDCONDITIONALRENDERPROC glad_glEndConditionalRender = NULL; 358 | PFNGLENDQUERYPROC glad_glEndQuery = NULL; 359 | PFNGLENDTRANSFORMFEEDBACKPROC glad_glEndTransformFeedback = NULL; 360 | PFNGLFENCESYNCPROC glad_glFenceSync = NULL; 361 | PFNGLFINISHPROC glad_glFinish = NULL; 362 | PFNGLFLUSHPROC glad_glFlush = NULL; 363 | PFNGLFLUSHMAPPEDBUFFERRANGEPROC glad_glFlushMappedBufferRange = NULL; 364 | PFNGLFRAMEBUFFERRENDERBUFFERPROC glad_glFramebufferRenderbuffer = NULL; 365 | PFNGLFRAMEBUFFERTEXTUREPROC glad_glFramebufferTexture = NULL; 366 | PFNGLFRAMEBUFFERTEXTURE1DPROC glad_glFramebufferTexture1D = NULL; 367 | PFNGLFRAMEBUFFERTEXTURE2DPROC glad_glFramebufferTexture2D = NULL; 368 | PFNGLFRAMEBUFFERTEXTURE3DPROC glad_glFramebufferTexture3D = NULL; 369 | PFNGLFRAMEBUFFERTEXTURELAYERPROC glad_glFramebufferTextureLayer = NULL; 370 | PFNGLFRONTFACEPROC glad_glFrontFace = NULL; 371 | PFNGLGENBUFFERSPROC glad_glGenBuffers = NULL; 372 | PFNGLGENFRAMEBUFFERSPROC glad_glGenFramebuffers = NULL; 373 | PFNGLGENQUERIESPROC glad_glGenQueries = NULL; 374 | PFNGLGENRENDERBUFFERSPROC glad_glGenRenderbuffers = NULL; 375 | PFNGLGENSAMPLERSPROC glad_glGenSamplers = NULL; 376 | PFNGLGENTEXTURESPROC glad_glGenTextures = NULL; 377 | PFNGLGENVERTEXARRAYSPROC glad_glGenVertexArrays = NULL; 378 | PFNGLGENERATEMIPMAPPROC glad_glGenerateMipmap = NULL; 379 | PFNGLGETACTIVEATTRIBPROC glad_glGetActiveAttrib = NULL; 380 | PFNGLGETACTIVEUNIFORMPROC glad_glGetActiveUniform = NULL; 381 | PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC glad_glGetActiveUniformBlockName = NULL; 382 | PFNGLGETACTIVEUNIFORMBLOCKIVPROC glad_glGetActiveUniformBlockiv = NULL; 383 | PFNGLGETACTIVEUNIFORMNAMEPROC glad_glGetActiveUniformName = NULL; 384 | PFNGLGETACTIVEUNIFORMSIVPROC glad_glGetActiveUniformsiv = NULL; 385 | PFNGLGETATTACHEDSHADERSPROC glad_glGetAttachedShaders = NULL; 386 | PFNGLGETATTRIBLOCATIONPROC glad_glGetAttribLocation = NULL; 387 | PFNGLGETBOOLEANI_VPROC glad_glGetBooleani_v = NULL; 388 | PFNGLGETBOOLEANVPROC glad_glGetBooleanv = NULL; 389 | PFNGLGETBUFFERPARAMETERI64VPROC glad_glGetBufferParameteri64v = NULL; 390 | PFNGLGETBUFFERPARAMETERIVPROC glad_glGetBufferParameteriv = NULL; 391 | PFNGLGETBUFFERPOINTERVPROC glad_glGetBufferPointerv = NULL; 392 | PFNGLGETBUFFERSUBDATAPROC glad_glGetBufferSubData = NULL; 393 | PFNGLGETCOMPRESSEDTEXIMAGEPROC glad_glGetCompressedTexImage = NULL; 394 | PFNGLGETDOUBLEVPROC glad_glGetDoublev = NULL; 395 | PFNGLGETERRORPROC glad_glGetError = NULL; 396 | PFNGLGETFLOATVPROC glad_glGetFloatv = NULL; 397 | PFNGLGETFRAGDATAINDEXPROC glad_glGetFragDataIndex = NULL; 398 | PFNGLGETFRAGDATALOCATIONPROC glad_glGetFragDataLocation = NULL; 399 | PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC glad_glGetFramebufferAttachmentParameteriv = NULL; 400 | PFNGLGETINTEGER64I_VPROC glad_glGetInteger64i_v = NULL; 401 | PFNGLGETINTEGER64VPROC glad_glGetInteger64v = NULL; 402 | PFNGLGETINTEGERI_VPROC glad_glGetIntegeri_v = NULL; 403 | PFNGLGETINTEGERVPROC glad_glGetIntegerv = NULL; 404 | PFNGLGETMULTISAMPLEFVPROC glad_glGetMultisamplefv = NULL; 405 | PFNGLGETPROGRAMINFOLOGPROC glad_glGetProgramInfoLog = NULL; 406 | PFNGLGETPROGRAMIVPROC glad_glGetProgramiv = NULL; 407 | PFNGLGETQUERYOBJECTI64VPROC glad_glGetQueryObjecti64v = NULL; 408 | PFNGLGETQUERYOBJECTIVPROC glad_glGetQueryObjectiv = NULL; 409 | PFNGLGETQUERYOBJECTUI64VPROC glad_glGetQueryObjectui64v = NULL; 410 | PFNGLGETQUERYOBJECTUIVPROC glad_glGetQueryObjectuiv = NULL; 411 | PFNGLGETQUERYIVPROC glad_glGetQueryiv = NULL; 412 | PFNGLGETRENDERBUFFERPARAMETERIVPROC glad_glGetRenderbufferParameteriv = NULL; 413 | PFNGLGETSAMPLERPARAMETERIIVPROC glad_glGetSamplerParameterIiv = NULL; 414 | PFNGLGETSAMPLERPARAMETERIUIVPROC glad_glGetSamplerParameterIuiv = NULL; 415 | PFNGLGETSAMPLERPARAMETERFVPROC glad_glGetSamplerParameterfv = NULL; 416 | PFNGLGETSAMPLERPARAMETERIVPROC glad_glGetSamplerParameteriv = NULL; 417 | PFNGLGETSHADERINFOLOGPROC glad_glGetShaderInfoLog = NULL; 418 | PFNGLGETSHADERSOURCEPROC glad_glGetShaderSource = NULL; 419 | PFNGLGETSHADERIVPROC glad_glGetShaderiv = NULL; 420 | PFNGLGETSTRINGPROC glad_glGetString = NULL; 421 | PFNGLGETSTRINGIPROC glad_glGetStringi = NULL; 422 | PFNGLGETSYNCIVPROC glad_glGetSynciv = NULL; 423 | PFNGLGETTEXIMAGEPROC glad_glGetTexImage = NULL; 424 | PFNGLGETTEXLEVELPARAMETERFVPROC glad_glGetTexLevelParameterfv = NULL; 425 | PFNGLGETTEXLEVELPARAMETERIVPROC glad_glGetTexLevelParameteriv = NULL; 426 | PFNGLGETTEXPARAMETERIIVPROC glad_glGetTexParameterIiv = NULL; 427 | PFNGLGETTEXPARAMETERIUIVPROC glad_glGetTexParameterIuiv = NULL; 428 | PFNGLGETTEXPARAMETERFVPROC glad_glGetTexParameterfv = NULL; 429 | PFNGLGETTEXPARAMETERIVPROC glad_glGetTexParameteriv = NULL; 430 | PFNGLGETTRANSFORMFEEDBACKVARYINGPROC glad_glGetTransformFeedbackVarying = NULL; 431 | PFNGLGETUNIFORMBLOCKINDEXPROC glad_glGetUniformBlockIndex = NULL; 432 | PFNGLGETUNIFORMINDICESPROC glad_glGetUniformIndices = NULL; 433 | PFNGLGETUNIFORMLOCATIONPROC glad_glGetUniformLocation = NULL; 434 | PFNGLGETUNIFORMFVPROC glad_glGetUniformfv = NULL; 435 | PFNGLGETUNIFORMIVPROC glad_glGetUniformiv = NULL; 436 | PFNGLGETUNIFORMUIVPROC glad_glGetUniformuiv = NULL; 437 | PFNGLGETVERTEXATTRIBIIVPROC glad_glGetVertexAttribIiv = NULL; 438 | PFNGLGETVERTEXATTRIBIUIVPROC glad_glGetVertexAttribIuiv = NULL; 439 | PFNGLGETVERTEXATTRIBPOINTERVPROC glad_glGetVertexAttribPointerv = NULL; 440 | PFNGLGETVERTEXATTRIBDVPROC glad_glGetVertexAttribdv = NULL; 441 | PFNGLGETVERTEXATTRIBFVPROC glad_glGetVertexAttribfv = NULL; 442 | PFNGLGETVERTEXATTRIBIVPROC glad_glGetVertexAttribiv = NULL; 443 | PFNGLHINTPROC glad_glHint = NULL; 444 | PFNGLISBUFFERPROC glad_glIsBuffer = NULL; 445 | PFNGLISENABLEDPROC glad_glIsEnabled = NULL; 446 | PFNGLISENABLEDIPROC glad_glIsEnabledi = NULL; 447 | PFNGLISFRAMEBUFFERPROC glad_glIsFramebuffer = NULL; 448 | PFNGLISPROGRAMPROC glad_glIsProgram = NULL; 449 | PFNGLISQUERYPROC glad_glIsQuery = NULL; 450 | PFNGLISRENDERBUFFERPROC glad_glIsRenderbuffer = NULL; 451 | PFNGLISSAMPLERPROC glad_glIsSampler = NULL; 452 | PFNGLISSHADERPROC glad_glIsShader = NULL; 453 | PFNGLISSYNCPROC glad_glIsSync = NULL; 454 | PFNGLISTEXTUREPROC glad_glIsTexture = NULL; 455 | PFNGLISVERTEXARRAYPROC glad_glIsVertexArray = NULL; 456 | PFNGLLINEWIDTHPROC glad_glLineWidth = NULL; 457 | PFNGLLINKPROGRAMPROC glad_glLinkProgram = NULL; 458 | PFNGLLOGICOPPROC glad_glLogicOp = NULL; 459 | PFNGLMAPBUFFERPROC glad_glMapBuffer = NULL; 460 | PFNGLMAPBUFFERRANGEPROC glad_glMapBufferRange = NULL; 461 | PFNGLMULTIDRAWARRAYSPROC glad_glMultiDrawArrays = NULL; 462 | PFNGLMULTIDRAWELEMENTSPROC glad_glMultiDrawElements = NULL; 463 | PFNGLMULTIDRAWELEMENTSBASEVERTEXPROC glad_glMultiDrawElementsBaseVertex = NULL; 464 | PFNGLMULTITEXCOORDP1UIPROC glad_glMultiTexCoordP1ui = NULL; 465 | PFNGLMULTITEXCOORDP1UIVPROC glad_glMultiTexCoordP1uiv = NULL; 466 | PFNGLMULTITEXCOORDP2UIPROC glad_glMultiTexCoordP2ui = NULL; 467 | PFNGLMULTITEXCOORDP2UIVPROC glad_glMultiTexCoordP2uiv = NULL; 468 | PFNGLMULTITEXCOORDP3UIPROC glad_glMultiTexCoordP3ui = NULL; 469 | PFNGLMULTITEXCOORDP3UIVPROC glad_glMultiTexCoordP3uiv = NULL; 470 | PFNGLMULTITEXCOORDP4UIPROC glad_glMultiTexCoordP4ui = NULL; 471 | PFNGLMULTITEXCOORDP4UIVPROC glad_glMultiTexCoordP4uiv = NULL; 472 | PFNGLNORMALP3UIPROC glad_glNormalP3ui = NULL; 473 | PFNGLNORMALP3UIVPROC glad_glNormalP3uiv = NULL; 474 | PFNGLPIXELSTOREFPROC glad_glPixelStoref = NULL; 475 | PFNGLPIXELSTOREIPROC glad_glPixelStorei = NULL; 476 | PFNGLPOINTPARAMETERFPROC glad_glPointParameterf = NULL; 477 | PFNGLPOINTPARAMETERFVPROC glad_glPointParameterfv = NULL; 478 | PFNGLPOINTPARAMETERIPROC glad_glPointParameteri = NULL; 479 | PFNGLPOINTPARAMETERIVPROC glad_glPointParameteriv = NULL; 480 | PFNGLPOINTSIZEPROC glad_glPointSize = NULL; 481 | PFNGLPOLYGONMODEPROC glad_glPolygonMode = NULL; 482 | PFNGLPOLYGONOFFSETPROC glad_glPolygonOffset = NULL; 483 | PFNGLPRIMITIVERESTARTINDEXPROC glad_glPrimitiveRestartIndex = NULL; 484 | PFNGLPROVOKINGVERTEXPROC glad_glProvokingVertex = NULL; 485 | PFNGLQUERYCOUNTERPROC glad_glQueryCounter = NULL; 486 | PFNGLREADBUFFERPROC glad_glReadBuffer = NULL; 487 | PFNGLREADPIXELSPROC glad_glReadPixels = NULL; 488 | PFNGLRENDERBUFFERSTORAGEPROC glad_glRenderbufferStorage = NULL; 489 | PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC glad_glRenderbufferStorageMultisample = NULL; 490 | PFNGLSAMPLECOVERAGEPROC glad_glSampleCoverage = NULL; 491 | PFNGLSAMPLEMASKIPROC glad_glSampleMaski = NULL; 492 | PFNGLSAMPLERPARAMETERIIVPROC glad_glSamplerParameterIiv = NULL; 493 | PFNGLSAMPLERPARAMETERIUIVPROC glad_glSamplerParameterIuiv = NULL; 494 | PFNGLSAMPLERPARAMETERFPROC glad_glSamplerParameterf = NULL; 495 | PFNGLSAMPLERPARAMETERFVPROC glad_glSamplerParameterfv = NULL; 496 | PFNGLSAMPLERPARAMETERIPROC glad_glSamplerParameteri = NULL; 497 | PFNGLSAMPLERPARAMETERIVPROC glad_glSamplerParameteriv = NULL; 498 | PFNGLSCISSORPROC glad_glScissor = NULL; 499 | PFNGLSECONDARYCOLORP3UIPROC glad_glSecondaryColorP3ui = NULL; 500 | PFNGLSECONDARYCOLORP3UIVPROC glad_glSecondaryColorP3uiv = NULL; 501 | PFNGLSHADERSOURCEPROC glad_glShaderSource = NULL; 502 | PFNGLSTENCILFUNCPROC glad_glStencilFunc = NULL; 503 | PFNGLSTENCILFUNCSEPARATEPROC glad_glStencilFuncSeparate = NULL; 504 | PFNGLSTENCILMASKPROC glad_glStencilMask = NULL; 505 | PFNGLSTENCILMASKSEPARATEPROC glad_glStencilMaskSeparate = NULL; 506 | PFNGLSTENCILOPPROC glad_glStencilOp = NULL; 507 | PFNGLSTENCILOPSEPARATEPROC glad_glStencilOpSeparate = NULL; 508 | PFNGLTEXBUFFERPROC glad_glTexBuffer = NULL; 509 | PFNGLTEXCOORDP1UIPROC glad_glTexCoordP1ui = NULL; 510 | PFNGLTEXCOORDP1UIVPROC glad_glTexCoordP1uiv = NULL; 511 | PFNGLTEXCOORDP2UIPROC glad_glTexCoordP2ui = NULL; 512 | PFNGLTEXCOORDP2UIVPROC glad_glTexCoordP2uiv = NULL; 513 | PFNGLTEXCOORDP3UIPROC glad_glTexCoordP3ui = NULL; 514 | PFNGLTEXCOORDP3UIVPROC glad_glTexCoordP3uiv = NULL; 515 | PFNGLTEXCOORDP4UIPROC glad_glTexCoordP4ui = NULL; 516 | PFNGLTEXCOORDP4UIVPROC glad_glTexCoordP4uiv = NULL; 517 | PFNGLTEXIMAGE1DPROC glad_glTexImage1D = NULL; 518 | PFNGLTEXIMAGE2DPROC glad_glTexImage2D = NULL; 519 | PFNGLTEXIMAGE2DMULTISAMPLEPROC glad_glTexImage2DMultisample = NULL; 520 | PFNGLTEXIMAGE3DPROC glad_glTexImage3D = NULL; 521 | PFNGLTEXIMAGE3DMULTISAMPLEPROC glad_glTexImage3DMultisample = NULL; 522 | PFNGLTEXPARAMETERIIVPROC glad_glTexParameterIiv = NULL; 523 | PFNGLTEXPARAMETERIUIVPROC glad_glTexParameterIuiv = NULL; 524 | PFNGLTEXPARAMETERFPROC glad_glTexParameterf = NULL; 525 | PFNGLTEXPARAMETERFVPROC glad_glTexParameterfv = NULL; 526 | PFNGLTEXPARAMETERIPROC glad_glTexParameteri = NULL; 527 | PFNGLTEXPARAMETERIVPROC glad_glTexParameteriv = NULL; 528 | PFNGLTEXSUBIMAGE1DPROC glad_glTexSubImage1D = NULL; 529 | PFNGLTEXSUBIMAGE2DPROC glad_glTexSubImage2D = NULL; 530 | PFNGLTEXSUBIMAGE3DPROC glad_glTexSubImage3D = NULL; 531 | PFNGLTRANSFORMFEEDBACKVARYINGSPROC glad_glTransformFeedbackVaryings = NULL; 532 | PFNGLUNIFORM1FPROC glad_glUniform1f = NULL; 533 | PFNGLUNIFORM1FVPROC glad_glUniform1fv = NULL; 534 | PFNGLUNIFORM1IPROC glad_glUniform1i = NULL; 535 | PFNGLUNIFORM1IVPROC glad_glUniform1iv = NULL; 536 | PFNGLUNIFORM1UIPROC glad_glUniform1ui = NULL; 537 | PFNGLUNIFORM1UIVPROC glad_glUniform1uiv = NULL; 538 | PFNGLUNIFORM2FPROC glad_glUniform2f = NULL; 539 | PFNGLUNIFORM2FVPROC glad_glUniform2fv = NULL; 540 | PFNGLUNIFORM2IPROC glad_glUniform2i = NULL; 541 | PFNGLUNIFORM2IVPROC glad_glUniform2iv = NULL; 542 | PFNGLUNIFORM2UIPROC glad_glUniform2ui = NULL; 543 | PFNGLUNIFORM2UIVPROC glad_glUniform2uiv = NULL; 544 | PFNGLUNIFORM3FPROC glad_glUniform3f = NULL; 545 | PFNGLUNIFORM3FVPROC glad_glUniform3fv = NULL; 546 | PFNGLUNIFORM3IPROC glad_glUniform3i = NULL; 547 | PFNGLUNIFORM3IVPROC glad_glUniform3iv = NULL; 548 | PFNGLUNIFORM3UIPROC glad_glUniform3ui = NULL; 549 | PFNGLUNIFORM3UIVPROC glad_glUniform3uiv = NULL; 550 | PFNGLUNIFORM4FPROC glad_glUniform4f = NULL; 551 | PFNGLUNIFORM4FVPROC glad_glUniform4fv = NULL; 552 | PFNGLUNIFORM4IPROC glad_glUniform4i = NULL; 553 | PFNGLUNIFORM4IVPROC glad_glUniform4iv = NULL; 554 | PFNGLUNIFORM4UIPROC glad_glUniform4ui = NULL; 555 | PFNGLUNIFORM4UIVPROC glad_glUniform4uiv = NULL; 556 | PFNGLUNIFORMBLOCKBINDINGPROC glad_glUniformBlockBinding = NULL; 557 | PFNGLUNIFORMMATRIX2FVPROC glad_glUniformMatrix2fv = NULL; 558 | PFNGLUNIFORMMATRIX2X3FVPROC glad_glUniformMatrix2x3fv = NULL; 559 | PFNGLUNIFORMMATRIX2X4FVPROC glad_glUniformMatrix2x4fv = NULL; 560 | PFNGLUNIFORMMATRIX3FVPROC glad_glUniformMatrix3fv = NULL; 561 | PFNGLUNIFORMMATRIX3X2FVPROC glad_glUniformMatrix3x2fv = NULL; 562 | PFNGLUNIFORMMATRIX3X4FVPROC glad_glUniformMatrix3x4fv = NULL; 563 | PFNGLUNIFORMMATRIX4FVPROC glad_glUniformMatrix4fv = NULL; 564 | PFNGLUNIFORMMATRIX4X2FVPROC glad_glUniformMatrix4x2fv = NULL; 565 | PFNGLUNIFORMMATRIX4X3FVPROC glad_glUniformMatrix4x3fv = NULL; 566 | PFNGLUNMAPBUFFERPROC glad_glUnmapBuffer = NULL; 567 | PFNGLUSEPROGRAMPROC glad_glUseProgram = NULL; 568 | PFNGLVALIDATEPROGRAMPROC glad_glValidateProgram = NULL; 569 | PFNGLVERTEXATTRIB1DPROC glad_glVertexAttrib1d = NULL; 570 | PFNGLVERTEXATTRIB1DVPROC glad_glVertexAttrib1dv = NULL; 571 | PFNGLVERTEXATTRIB1FPROC glad_glVertexAttrib1f = NULL; 572 | PFNGLVERTEXATTRIB1FVPROC glad_glVertexAttrib1fv = NULL; 573 | PFNGLVERTEXATTRIB1SPROC glad_glVertexAttrib1s = NULL; 574 | PFNGLVERTEXATTRIB1SVPROC glad_glVertexAttrib1sv = NULL; 575 | PFNGLVERTEXATTRIB2DPROC glad_glVertexAttrib2d = NULL; 576 | PFNGLVERTEXATTRIB2DVPROC glad_glVertexAttrib2dv = NULL; 577 | PFNGLVERTEXATTRIB2FPROC glad_glVertexAttrib2f = NULL; 578 | PFNGLVERTEXATTRIB2FVPROC glad_glVertexAttrib2fv = NULL; 579 | PFNGLVERTEXATTRIB2SPROC glad_glVertexAttrib2s = NULL; 580 | PFNGLVERTEXATTRIB2SVPROC glad_glVertexAttrib2sv = NULL; 581 | PFNGLVERTEXATTRIB3DPROC glad_glVertexAttrib3d = NULL; 582 | PFNGLVERTEXATTRIB3DVPROC glad_glVertexAttrib3dv = NULL; 583 | PFNGLVERTEXATTRIB3FPROC glad_glVertexAttrib3f = NULL; 584 | PFNGLVERTEXATTRIB3FVPROC glad_glVertexAttrib3fv = NULL; 585 | PFNGLVERTEXATTRIB3SPROC glad_glVertexAttrib3s = NULL; 586 | PFNGLVERTEXATTRIB3SVPROC glad_glVertexAttrib3sv = NULL; 587 | PFNGLVERTEXATTRIB4NBVPROC glad_glVertexAttrib4Nbv = NULL; 588 | PFNGLVERTEXATTRIB4NIVPROC glad_glVertexAttrib4Niv = NULL; 589 | PFNGLVERTEXATTRIB4NSVPROC glad_glVertexAttrib4Nsv = NULL; 590 | PFNGLVERTEXATTRIB4NUBPROC glad_glVertexAttrib4Nub = NULL; 591 | PFNGLVERTEXATTRIB4NUBVPROC glad_glVertexAttrib4Nubv = NULL; 592 | PFNGLVERTEXATTRIB4NUIVPROC glad_glVertexAttrib4Nuiv = NULL; 593 | PFNGLVERTEXATTRIB4NUSVPROC glad_glVertexAttrib4Nusv = NULL; 594 | PFNGLVERTEXATTRIB4BVPROC glad_glVertexAttrib4bv = NULL; 595 | PFNGLVERTEXATTRIB4DPROC glad_glVertexAttrib4d = NULL; 596 | PFNGLVERTEXATTRIB4DVPROC glad_glVertexAttrib4dv = NULL; 597 | PFNGLVERTEXATTRIB4FPROC glad_glVertexAttrib4f = NULL; 598 | PFNGLVERTEXATTRIB4FVPROC glad_glVertexAttrib4fv = NULL; 599 | PFNGLVERTEXATTRIB4IVPROC glad_glVertexAttrib4iv = NULL; 600 | PFNGLVERTEXATTRIB4SPROC glad_glVertexAttrib4s = NULL; 601 | PFNGLVERTEXATTRIB4SVPROC glad_glVertexAttrib4sv = NULL; 602 | PFNGLVERTEXATTRIB4UBVPROC glad_glVertexAttrib4ubv = NULL; 603 | PFNGLVERTEXATTRIB4UIVPROC glad_glVertexAttrib4uiv = NULL; 604 | PFNGLVERTEXATTRIB4USVPROC glad_glVertexAttrib4usv = NULL; 605 | PFNGLVERTEXATTRIBDIVISORPROC glad_glVertexAttribDivisor = NULL; 606 | PFNGLVERTEXATTRIBI1IPROC glad_glVertexAttribI1i = NULL; 607 | PFNGLVERTEXATTRIBI1IVPROC glad_glVertexAttribI1iv = NULL; 608 | PFNGLVERTEXATTRIBI1UIPROC glad_glVertexAttribI1ui = NULL; 609 | PFNGLVERTEXATTRIBI1UIVPROC glad_glVertexAttribI1uiv = NULL; 610 | PFNGLVERTEXATTRIBI2IPROC glad_glVertexAttribI2i = NULL; 611 | PFNGLVERTEXATTRIBI2IVPROC glad_glVertexAttribI2iv = NULL; 612 | PFNGLVERTEXATTRIBI2UIPROC glad_glVertexAttribI2ui = NULL; 613 | PFNGLVERTEXATTRIBI2UIVPROC glad_glVertexAttribI2uiv = NULL; 614 | PFNGLVERTEXATTRIBI3IPROC glad_glVertexAttribI3i = NULL; 615 | PFNGLVERTEXATTRIBI3IVPROC glad_glVertexAttribI3iv = NULL; 616 | PFNGLVERTEXATTRIBI3UIPROC glad_glVertexAttribI3ui = NULL; 617 | PFNGLVERTEXATTRIBI3UIVPROC glad_glVertexAttribI3uiv = NULL; 618 | PFNGLVERTEXATTRIBI4BVPROC glad_glVertexAttribI4bv = NULL; 619 | PFNGLVERTEXATTRIBI4IPROC glad_glVertexAttribI4i = NULL; 620 | PFNGLVERTEXATTRIBI4IVPROC glad_glVertexAttribI4iv = NULL; 621 | PFNGLVERTEXATTRIBI4SVPROC glad_glVertexAttribI4sv = NULL; 622 | PFNGLVERTEXATTRIBI4UBVPROC glad_glVertexAttribI4ubv = NULL; 623 | PFNGLVERTEXATTRIBI4UIPROC glad_glVertexAttribI4ui = NULL; 624 | PFNGLVERTEXATTRIBI4UIVPROC glad_glVertexAttribI4uiv = NULL; 625 | PFNGLVERTEXATTRIBI4USVPROC glad_glVertexAttribI4usv = NULL; 626 | PFNGLVERTEXATTRIBIPOINTERPROC glad_glVertexAttribIPointer = NULL; 627 | PFNGLVERTEXATTRIBP1UIPROC glad_glVertexAttribP1ui = NULL; 628 | PFNGLVERTEXATTRIBP1UIVPROC glad_glVertexAttribP1uiv = NULL; 629 | PFNGLVERTEXATTRIBP2UIPROC glad_glVertexAttribP2ui = NULL; 630 | PFNGLVERTEXATTRIBP2UIVPROC glad_glVertexAttribP2uiv = NULL; 631 | PFNGLVERTEXATTRIBP3UIPROC glad_glVertexAttribP3ui = NULL; 632 | PFNGLVERTEXATTRIBP3UIVPROC glad_glVertexAttribP3uiv = NULL; 633 | PFNGLVERTEXATTRIBP4UIPROC glad_glVertexAttribP4ui = NULL; 634 | PFNGLVERTEXATTRIBP4UIVPROC glad_glVertexAttribP4uiv = NULL; 635 | PFNGLVERTEXATTRIBPOINTERPROC glad_glVertexAttribPointer = NULL; 636 | PFNGLVERTEXP2UIPROC glad_glVertexP2ui = NULL; 637 | PFNGLVERTEXP2UIVPROC glad_glVertexP2uiv = NULL; 638 | PFNGLVERTEXP3UIPROC glad_glVertexP3ui = NULL; 639 | PFNGLVERTEXP3UIVPROC glad_glVertexP3uiv = NULL; 640 | PFNGLVERTEXP4UIPROC glad_glVertexP4ui = NULL; 641 | PFNGLVERTEXP4UIVPROC glad_glVertexP4uiv = NULL; 642 | PFNGLVIEWPORTPROC glad_glViewport = NULL; 643 | PFNGLWAITSYNCPROC glad_glWaitSync = NULL; 644 | static void load_GL_VERSION_1_0(GLADloadproc load) { 645 | if(!GLAD_GL_VERSION_1_0) return; 646 | glad_glCullFace = (PFNGLCULLFACEPROC)load("glCullFace"); 647 | glad_glFrontFace = (PFNGLFRONTFACEPROC)load("glFrontFace"); 648 | glad_glHint = (PFNGLHINTPROC)load("glHint"); 649 | glad_glLineWidth = (PFNGLLINEWIDTHPROC)load("glLineWidth"); 650 | glad_glPointSize = (PFNGLPOINTSIZEPROC)load("glPointSize"); 651 | glad_glPolygonMode = (PFNGLPOLYGONMODEPROC)load("glPolygonMode"); 652 | glad_glScissor = (PFNGLSCISSORPROC)load("glScissor"); 653 | glad_glTexParameterf = (PFNGLTEXPARAMETERFPROC)load("glTexParameterf"); 654 | glad_glTexParameterfv = (PFNGLTEXPARAMETERFVPROC)load("glTexParameterfv"); 655 | glad_glTexParameteri = (PFNGLTEXPARAMETERIPROC)load("glTexParameteri"); 656 | glad_glTexParameteriv = (PFNGLTEXPARAMETERIVPROC)load("glTexParameteriv"); 657 | glad_glTexImage1D = (PFNGLTEXIMAGE1DPROC)load("glTexImage1D"); 658 | glad_glTexImage2D = (PFNGLTEXIMAGE2DPROC)load("glTexImage2D"); 659 | glad_glDrawBuffer = (PFNGLDRAWBUFFERPROC)load("glDrawBuffer"); 660 | glad_glClear = (PFNGLCLEARPROC)load("glClear"); 661 | glad_glClearColor = (PFNGLCLEARCOLORPROC)load("glClearColor"); 662 | glad_glClearStencil = (PFNGLCLEARSTENCILPROC)load("glClearStencil"); 663 | glad_glClearDepth = (PFNGLCLEARDEPTHPROC)load("glClearDepth"); 664 | glad_glStencilMask = (PFNGLSTENCILMASKPROC)load("glStencilMask"); 665 | glad_glColorMask = (PFNGLCOLORMASKPROC)load("glColorMask"); 666 | glad_glDepthMask = (PFNGLDEPTHMASKPROC)load("glDepthMask"); 667 | glad_glDisable = (PFNGLDISABLEPROC)load("glDisable"); 668 | glad_glEnable = (PFNGLENABLEPROC)load("glEnable"); 669 | glad_glFinish = (PFNGLFINISHPROC)load("glFinish"); 670 | glad_glFlush = (PFNGLFLUSHPROC)load("glFlush"); 671 | glad_glBlendFunc = (PFNGLBLENDFUNCPROC)load("glBlendFunc"); 672 | glad_glLogicOp = (PFNGLLOGICOPPROC)load("glLogicOp"); 673 | glad_glStencilFunc = (PFNGLSTENCILFUNCPROC)load("glStencilFunc"); 674 | glad_glStencilOp = (PFNGLSTENCILOPPROC)load("glStencilOp"); 675 | glad_glDepthFunc = (PFNGLDEPTHFUNCPROC)load("glDepthFunc"); 676 | glad_glPixelStoref = (PFNGLPIXELSTOREFPROC)load("glPixelStoref"); 677 | glad_glPixelStorei = (PFNGLPIXELSTOREIPROC)load("glPixelStorei"); 678 | glad_glReadBuffer = (PFNGLREADBUFFERPROC)load("glReadBuffer"); 679 | glad_glReadPixels = (PFNGLREADPIXELSPROC)load("glReadPixels"); 680 | glad_glGetBooleanv = (PFNGLGETBOOLEANVPROC)load("glGetBooleanv"); 681 | glad_glGetDoublev = (PFNGLGETDOUBLEVPROC)load("glGetDoublev"); 682 | glad_glGetError = (PFNGLGETERRORPROC)load("glGetError"); 683 | glad_glGetFloatv = (PFNGLGETFLOATVPROC)load("glGetFloatv"); 684 | glad_glGetIntegerv = (PFNGLGETINTEGERVPROC)load("glGetIntegerv"); 685 | glad_glGetString = (PFNGLGETSTRINGPROC)load("glGetString"); 686 | glad_glGetTexImage = (PFNGLGETTEXIMAGEPROC)load("glGetTexImage"); 687 | glad_glGetTexParameterfv = (PFNGLGETTEXPARAMETERFVPROC)load("glGetTexParameterfv"); 688 | glad_glGetTexParameteriv = (PFNGLGETTEXPARAMETERIVPROC)load("glGetTexParameteriv"); 689 | glad_glGetTexLevelParameterfv = (PFNGLGETTEXLEVELPARAMETERFVPROC)load("glGetTexLevelParameterfv"); 690 | glad_glGetTexLevelParameteriv = (PFNGLGETTEXLEVELPARAMETERIVPROC)load("glGetTexLevelParameteriv"); 691 | glad_glIsEnabled = (PFNGLISENABLEDPROC)load("glIsEnabled"); 692 | glad_glDepthRange = (PFNGLDEPTHRANGEPROC)load("glDepthRange"); 693 | glad_glViewport = (PFNGLVIEWPORTPROC)load("glViewport"); 694 | } 695 | static void load_GL_VERSION_1_1(GLADloadproc load) { 696 | if(!GLAD_GL_VERSION_1_1) return; 697 | glad_glDrawArrays = (PFNGLDRAWARRAYSPROC)load("glDrawArrays"); 698 | glad_glDrawElements = (PFNGLDRAWELEMENTSPROC)load("glDrawElements"); 699 | glad_glPolygonOffset = (PFNGLPOLYGONOFFSETPROC)load("glPolygonOffset"); 700 | glad_glCopyTexImage1D = (PFNGLCOPYTEXIMAGE1DPROC)load("glCopyTexImage1D"); 701 | glad_glCopyTexImage2D = (PFNGLCOPYTEXIMAGE2DPROC)load("glCopyTexImage2D"); 702 | glad_glCopyTexSubImage1D = (PFNGLCOPYTEXSUBIMAGE1DPROC)load("glCopyTexSubImage1D"); 703 | glad_glCopyTexSubImage2D = (PFNGLCOPYTEXSUBIMAGE2DPROC)load("glCopyTexSubImage2D"); 704 | glad_glTexSubImage1D = (PFNGLTEXSUBIMAGE1DPROC)load("glTexSubImage1D"); 705 | glad_glTexSubImage2D = (PFNGLTEXSUBIMAGE2DPROC)load("glTexSubImage2D"); 706 | glad_glBindTexture = (PFNGLBINDTEXTUREPROC)load("glBindTexture"); 707 | glad_glDeleteTextures = (PFNGLDELETETEXTURESPROC)load("glDeleteTextures"); 708 | glad_glGenTextures = (PFNGLGENTEXTURESPROC)load("glGenTextures"); 709 | glad_glIsTexture = (PFNGLISTEXTUREPROC)load("glIsTexture"); 710 | } 711 | static void load_GL_VERSION_1_2(GLADloadproc load) { 712 | if(!GLAD_GL_VERSION_1_2) return; 713 | glad_glDrawRangeElements = (PFNGLDRAWRANGEELEMENTSPROC)load("glDrawRangeElements"); 714 | glad_glTexImage3D = (PFNGLTEXIMAGE3DPROC)load("glTexImage3D"); 715 | glad_glTexSubImage3D = (PFNGLTEXSUBIMAGE3DPROC)load("glTexSubImage3D"); 716 | glad_glCopyTexSubImage3D = (PFNGLCOPYTEXSUBIMAGE3DPROC)load("glCopyTexSubImage3D"); 717 | } 718 | static void load_GL_VERSION_1_3(GLADloadproc load) { 719 | if(!GLAD_GL_VERSION_1_3) return; 720 | glad_glActiveTexture = (PFNGLACTIVETEXTUREPROC)load("glActiveTexture"); 721 | glad_glSampleCoverage = (PFNGLSAMPLECOVERAGEPROC)load("glSampleCoverage"); 722 | glad_glCompressedTexImage3D = (PFNGLCOMPRESSEDTEXIMAGE3DPROC)load("glCompressedTexImage3D"); 723 | glad_glCompressedTexImage2D = (PFNGLCOMPRESSEDTEXIMAGE2DPROC)load("glCompressedTexImage2D"); 724 | glad_glCompressedTexImage1D = (PFNGLCOMPRESSEDTEXIMAGE1DPROC)load("glCompressedTexImage1D"); 725 | glad_glCompressedTexSubImage3D = (PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC)load("glCompressedTexSubImage3D"); 726 | glad_glCompressedTexSubImage2D = (PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC)load("glCompressedTexSubImage2D"); 727 | glad_glCompressedTexSubImage1D = (PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC)load("glCompressedTexSubImage1D"); 728 | glad_glGetCompressedTexImage = (PFNGLGETCOMPRESSEDTEXIMAGEPROC)load("glGetCompressedTexImage"); 729 | } 730 | static void load_GL_VERSION_1_4(GLADloadproc load) { 731 | if(!GLAD_GL_VERSION_1_4) return; 732 | glad_glBlendFuncSeparate = (PFNGLBLENDFUNCSEPARATEPROC)load("glBlendFuncSeparate"); 733 | glad_glMultiDrawArrays = (PFNGLMULTIDRAWARRAYSPROC)load("glMultiDrawArrays"); 734 | glad_glMultiDrawElements = (PFNGLMULTIDRAWELEMENTSPROC)load("glMultiDrawElements"); 735 | glad_glPointParameterf = (PFNGLPOINTPARAMETERFPROC)load("glPointParameterf"); 736 | glad_glPointParameterfv = (PFNGLPOINTPARAMETERFVPROC)load("glPointParameterfv"); 737 | glad_glPointParameteri = (PFNGLPOINTPARAMETERIPROC)load("glPointParameteri"); 738 | glad_glPointParameteriv = (PFNGLPOINTPARAMETERIVPROC)load("glPointParameteriv"); 739 | glad_glBlendColor = (PFNGLBLENDCOLORPROC)load("glBlendColor"); 740 | glad_glBlendEquation = (PFNGLBLENDEQUATIONPROC)load("glBlendEquation"); 741 | } 742 | static void load_GL_VERSION_1_5(GLADloadproc load) { 743 | if(!GLAD_GL_VERSION_1_5) return; 744 | glad_glGenQueries = (PFNGLGENQUERIESPROC)load("glGenQueries"); 745 | glad_glDeleteQueries = (PFNGLDELETEQUERIESPROC)load("glDeleteQueries"); 746 | glad_glIsQuery = (PFNGLISQUERYPROC)load("glIsQuery"); 747 | glad_glBeginQuery = (PFNGLBEGINQUERYPROC)load("glBeginQuery"); 748 | glad_glEndQuery = (PFNGLENDQUERYPROC)load("glEndQuery"); 749 | glad_glGetQueryiv = (PFNGLGETQUERYIVPROC)load("glGetQueryiv"); 750 | glad_glGetQueryObjectiv = (PFNGLGETQUERYOBJECTIVPROC)load("glGetQueryObjectiv"); 751 | glad_glGetQueryObjectuiv = (PFNGLGETQUERYOBJECTUIVPROC)load("glGetQueryObjectuiv"); 752 | glad_glBindBuffer = (PFNGLBINDBUFFERPROC)load("glBindBuffer"); 753 | glad_glDeleteBuffers = (PFNGLDELETEBUFFERSPROC)load("glDeleteBuffers"); 754 | glad_glGenBuffers = (PFNGLGENBUFFERSPROC)load("glGenBuffers"); 755 | glad_glIsBuffer = (PFNGLISBUFFERPROC)load("glIsBuffer"); 756 | glad_glBufferData = (PFNGLBUFFERDATAPROC)load("glBufferData"); 757 | glad_glBufferSubData = (PFNGLBUFFERSUBDATAPROC)load("glBufferSubData"); 758 | glad_glGetBufferSubData = (PFNGLGETBUFFERSUBDATAPROC)load("glGetBufferSubData"); 759 | glad_glMapBuffer = (PFNGLMAPBUFFERPROC)load("glMapBuffer"); 760 | glad_glUnmapBuffer = (PFNGLUNMAPBUFFERPROC)load("glUnmapBuffer"); 761 | glad_glGetBufferParameteriv = (PFNGLGETBUFFERPARAMETERIVPROC)load("glGetBufferParameteriv"); 762 | glad_glGetBufferPointerv = (PFNGLGETBUFFERPOINTERVPROC)load("glGetBufferPointerv"); 763 | } 764 | static void load_GL_VERSION_2_0(GLADloadproc load) { 765 | if(!GLAD_GL_VERSION_2_0) return; 766 | glad_glBlendEquationSeparate = (PFNGLBLENDEQUATIONSEPARATEPROC)load("glBlendEquationSeparate"); 767 | glad_glDrawBuffers = (PFNGLDRAWBUFFERSPROC)load("glDrawBuffers"); 768 | glad_glStencilOpSeparate = (PFNGLSTENCILOPSEPARATEPROC)load("glStencilOpSeparate"); 769 | glad_glStencilFuncSeparate = (PFNGLSTENCILFUNCSEPARATEPROC)load("glStencilFuncSeparate"); 770 | glad_glStencilMaskSeparate = (PFNGLSTENCILMASKSEPARATEPROC)load("glStencilMaskSeparate"); 771 | glad_glAttachShader = (PFNGLATTACHSHADERPROC)load("glAttachShader"); 772 | glad_glBindAttribLocation = (PFNGLBINDATTRIBLOCATIONPROC)load("glBindAttribLocation"); 773 | glad_glCompileShader = (PFNGLCOMPILESHADERPROC)load("glCompileShader"); 774 | glad_glCreateProgram = (PFNGLCREATEPROGRAMPROC)load("glCreateProgram"); 775 | glad_glCreateShader = (PFNGLCREATESHADERPROC)load("glCreateShader"); 776 | glad_glDeleteProgram = (PFNGLDELETEPROGRAMPROC)load("glDeleteProgram"); 777 | glad_glDeleteShader = (PFNGLDELETESHADERPROC)load("glDeleteShader"); 778 | glad_glDetachShader = (PFNGLDETACHSHADERPROC)load("glDetachShader"); 779 | glad_glDisableVertexAttribArray = (PFNGLDISABLEVERTEXATTRIBARRAYPROC)load("glDisableVertexAttribArray"); 780 | glad_glEnableVertexAttribArray = (PFNGLENABLEVERTEXATTRIBARRAYPROC)load("glEnableVertexAttribArray"); 781 | glad_glGetActiveAttrib = (PFNGLGETACTIVEATTRIBPROC)load("glGetActiveAttrib"); 782 | glad_glGetActiveUniform = (PFNGLGETACTIVEUNIFORMPROC)load("glGetActiveUniform"); 783 | glad_glGetAttachedShaders = (PFNGLGETATTACHEDSHADERSPROC)load("glGetAttachedShaders"); 784 | glad_glGetAttribLocation = (PFNGLGETATTRIBLOCATIONPROC)load("glGetAttribLocation"); 785 | glad_glGetProgramiv = (PFNGLGETPROGRAMIVPROC)load("glGetProgramiv"); 786 | glad_glGetProgramInfoLog = (PFNGLGETPROGRAMINFOLOGPROC)load("glGetProgramInfoLog"); 787 | glad_glGetShaderiv = (PFNGLGETSHADERIVPROC)load("glGetShaderiv"); 788 | glad_glGetShaderInfoLog = (PFNGLGETSHADERINFOLOGPROC)load("glGetShaderInfoLog"); 789 | glad_glGetShaderSource = (PFNGLGETSHADERSOURCEPROC)load("glGetShaderSource"); 790 | glad_glGetUniformLocation = (PFNGLGETUNIFORMLOCATIONPROC)load("glGetUniformLocation"); 791 | glad_glGetUniformfv = (PFNGLGETUNIFORMFVPROC)load("glGetUniformfv"); 792 | glad_glGetUniformiv = (PFNGLGETUNIFORMIVPROC)load("glGetUniformiv"); 793 | glad_glGetVertexAttribdv = (PFNGLGETVERTEXATTRIBDVPROC)load("glGetVertexAttribdv"); 794 | glad_glGetVertexAttribfv = (PFNGLGETVERTEXATTRIBFVPROC)load("glGetVertexAttribfv"); 795 | glad_glGetVertexAttribiv = (PFNGLGETVERTEXATTRIBIVPROC)load("glGetVertexAttribiv"); 796 | glad_glGetVertexAttribPointerv = (PFNGLGETVERTEXATTRIBPOINTERVPROC)load("glGetVertexAttribPointerv"); 797 | glad_glIsProgram = (PFNGLISPROGRAMPROC)load("glIsProgram"); 798 | glad_glIsShader = (PFNGLISSHADERPROC)load("glIsShader"); 799 | glad_glLinkProgram = (PFNGLLINKPROGRAMPROC)load("glLinkProgram"); 800 | glad_glShaderSource = (PFNGLSHADERSOURCEPROC)load("glShaderSource"); 801 | glad_glUseProgram = (PFNGLUSEPROGRAMPROC)load("glUseProgram"); 802 | glad_glUniform1f = (PFNGLUNIFORM1FPROC)load("glUniform1f"); 803 | glad_glUniform2f = (PFNGLUNIFORM2FPROC)load("glUniform2f"); 804 | glad_glUniform3f = (PFNGLUNIFORM3FPROC)load("glUniform3f"); 805 | glad_glUniform4f = (PFNGLUNIFORM4FPROC)load("glUniform4f"); 806 | glad_glUniform1i = (PFNGLUNIFORM1IPROC)load("glUniform1i"); 807 | glad_glUniform2i = (PFNGLUNIFORM2IPROC)load("glUniform2i"); 808 | glad_glUniform3i = (PFNGLUNIFORM3IPROC)load("glUniform3i"); 809 | glad_glUniform4i = (PFNGLUNIFORM4IPROC)load("glUniform4i"); 810 | glad_glUniform1fv = (PFNGLUNIFORM1FVPROC)load("glUniform1fv"); 811 | glad_glUniform2fv = (PFNGLUNIFORM2FVPROC)load("glUniform2fv"); 812 | glad_glUniform3fv = (PFNGLUNIFORM3FVPROC)load("glUniform3fv"); 813 | glad_glUniform4fv = (PFNGLUNIFORM4FVPROC)load("glUniform4fv"); 814 | glad_glUniform1iv = (PFNGLUNIFORM1IVPROC)load("glUniform1iv"); 815 | glad_glUniform2iv = (PFNGLUNIFORM2IVPROC)load("glUniform2iv"); 816 | glad_glUniform3iv = (PFNGLUNIFORM3IVPROC)load("glUniform3iv"); 817 | glad_glUniform4iv = (PFNGLUNIFORM4IVPROC)load("glUniform4iv"); 818 | glad_glUniformMatrix2fv = (PFNGLUNIFORMMATRIX2FVPROC)load("glUniformMatrix2fv"); 819 | glad_glUniformMatrix3fv = (PFNGLUNIFORMMATRIX3FVPROC)load("glUniformMatrix3fv"); 820 | glad_glUniformMatrix4fv = (PFNGLUNIFORMMATRIX4FVPROC)load("glUniformMatrix4fv"); 821 | glad_glValidateProgram = (PFNGLVALIDATEPROGRAMPROC)load("glValidateProgram"); 822 | glad_glVertexAttrib1d = (PFNGLVERTEXATTRIB1DPROC)load("glVertexAttrib1d"); 823 | glad_glVertexAttrib1dv = (PFNGLVERTEXATTRIB1DVPROC)load("glVertexAttrib1dv"); 824 | glad_glVertexAttrib1f = (PFNGLVERTEXATTRIB1FPROC)load("glVertexAttrib1f"); 825 | glad_glVertexAttrib1fv = (PFNGLVERTEXATTRIB1FVPROC)load("glVertexAttrib1fv"); 826 | glad_glVertexAttrib1s = (PFNGLVERTEXATTRIB1SPROC)load("glVertexAttrib1s"); 827 | glad_glVertexAttrib1sv = (PFNGLVERTEXATTRIB1SVPROC)load("glVertexAttrib1sv"); 828 | glad_glVertexAttrib2d = (PFNGLVERTEXATTRIB2DPROC)load("glVertexAttrib2d"); 829 | glad_glVertexAttrib2dv = (PFNGLVERTEXATTRIB2DVPROC)load("glVertexAttrib2dv"); 830 | glad_glVertexAttrib2f = (PFNGLVERTEXATTRIB2FPROC)load("glVertexAttrib2f"); 831 | glad_glVertexAttrib2fv = (PFNGLVERTEXATTRIB2FVPROC)load("glVertexAttrib2fv"); 832 | glad_glVertexAttrib2s = (PFNGLVERTEXATTRIB2SPROC)load("glVertexAttrib2s"); 833 | glad_glVertexAttrib2sv = (PFNGLVERTEXATTRIB2SVPROC)load("glVertexAttrib2sv"); 834 | glad_glVertexAttrib3d = (PFNGLVERTEXATTRIB3DPROC)load("glVertexAttrib3d"); 835 | glad_glVertexAttrib3dv = (PFNGLVERTEXATTRIB3DVPROC)load("glVertexAttrib3dv"); 836 | glad_glVertexAttrib3f = (PFNGLVERTEXATTRIB3FPROC)load("glVertexAttrib3f"); 837 | glad_glVertexAttrib3fv = (PFNGLVERTEXATTRIB3FVPROC)load("glVertexAttrib3fv"); 838 | glad_glVertexAttrib3s = (PFNGLVERTEXATTRIB3SPROC)load("glVertexAttrib3s"); 839 | glad_glVertexAttrib3sv = (PFNGLVERTEXATTRIB3SVPROC)load("glVertexAttrib3sv"); 840 | glad_glVertexAttrib4Nbv = (PFNGLVERTEXATTRIB4NBVPROC)load("glVertexAttrib4Nbv"); 841 | glad_glVertexAttrib4Niv = (PFNGLVERTEXATTRIB4NIVPROC)load("glVertexAttrib4Niv"); 842 | glad_glVertexAttrib4Nsv = (PFNGLVERTEXATTRIB4NSVPROC)load("glVertexAttrib4Nsv"); 843 | glad_glVertexAttrib4Nub = (PFNGLVERTEXATTRIB4NUBPROC)load("glVertexAttrib4Nub"); 844 | glad_glVertexAttrib4Nubv = (PFNGLVERTEXATTRIB4NUBVPROC)load("glVertexAttrib4Nubv"); 845 | glad_glVertexAttrib4Nuiv = (PFNGLVERTEXATTRIB4NUIVPROC)load("glVertexAttrib4Nuiv"); 846 | glad_glVertexAttrib4Nusv = (PFNGLVERTEXATTRIB4NUSVPROC)load("glVertexAttrib4Nusv"); 847 | glad_glVertexAttrib4bv = (PFNGLVERTEXATTRIB4BVPROC)load("glVertexAttrib4bv"); 848 | glad_glVertexAttrib4d = (PFNGLVERTEXATTRIB4DPROC)load("glVertexAttrib4d"); 849 | glad_glVertexAttrib4dv = (PFNGLVERTEXATTRIB4DVPROC)load("glVertexAttrib4dv"); 850 | glad_glVertexAttrib4f = (PFNGLVERTEXATTRIB4FPROC)load("glVertexAttrib4f"); 851 | glad_glVertexAttrib4fv = (PFNGLVERTEXATTRIB4FVPROC)load("glVertexAttrib4fv"); 852 | glad_glVertexAttrib4iv = (PFNGLVERTEXATTRIB4IVPROC)load("glVertexAttrib4iv"); 853 | glad_glVertexAttrib4s = (PFNGLVERTEXATTRIB4SPROC)load("glVertexAttrib4s"); 854 | glad_glVertexAttrib4sv = (PFNGLVERTEXATTRIB4SVPROC)load("glVertexAttrib4sv"); 855 | glad_glVertexAttrib4ubv = (PFNGLVERTEXATTRIB4UBVPROC)load("glVertexAttrib4ubv"); 856 | glad_glVertexAttrib4uiv = (PFNGLVERTEXATTRIB4UIVPROC)load("glVertexAttrib4uiv"); 857 | glad_glVertexAttrib4usv = (PFNGLVERTEXATTRIB4USVPROC)load("glVertexAttrib4usv"); 858 | glad_glVertexAttribPointer = (PFNGLVERTEXATTRIBPOINTERPROC)load("glVertexAttribPointer"); 859 | } 860 | static void load_GL_VERSION_2_1(GLADloadproc load) { 861 | if(!GLAD_GL_VERSION_2_1) return; 862 | glad_glUniformMatrix2x3fv = (PFNGLUNIFORMMATRIX2X3FVPROC)load("glUniformMatrix2x3fv"); 863 | glad_glUniformMatrix3x2fv = (PFNGLUNIFORMMATRIX3X2FVPROC)load("glUniformMatrix3x2fv"); 864 | glad_glUniformMatrix2x4fv = (PFNGLUNIFORMMATRIX2X4FVPROC)load("glUniformMatrix2x4fv"); 865 | glad_glUniformMatrix4x2fv = (PFNGLUNIFORMMATRIX4X2FVPROC)load("glUniformMatrix4x2fv"); 866 | glad_glUniformMatrix3x4fv = (PFNGLUNIFORMMATRIX3X4FVPROC)load("glUniformMatrix3x4fv"); 867 | glad_glUniformMatrix4x3fv = (PFNGLUNIFORMMATRIX4X3FVPROC)load("glUniformMatrix4x3fv"); 868 | } 869 | static void load_GL_VERSION_3_0(GLADloadproc load) { 870 | if(!GLAD_GL_VERSION_3_0) return; 871 | glad_glColorMaski = (PFNGLCOLORMASKIPROC)load("glColorMaski"); 872 | glad_glGetBooleani_v = (PFNGLGETBOOLEANI_VPROC)load("glGetBooleani_v"); 873 | glad_glGetIntegeri_v = (PFNGLGETINTEGERI_VPROC)load("glGetIntegeri_v"); 874 | glad_glEnablei = (PFNGLENABLEIPROC)load("glEnablei"); 875 | glad_glDisablei = (PFNGLDISABLEIPROC)load("glDisablei"); 876 | glad_glIsEnabledi = (PFNGLISENABLEDIPROC)load("glIsEnabledi"); 877 | glad_glBeginTransformFeedback = (PFNGLBEGINTRANSFORMFEEDBACKPROC)load("glBeginTransformFeedback"); 878 | glad_glEndTransformFeedback = (PFNGLENDTRANSFORMFEEDBACKPROC)load("glEndTransformFeedback"); 879 | glad_glBindBufferRange = (PFNGLBINDBUFFERRANGEPROC)load("glBindBufferRange"); 880 | glad_glBindBufferBase = (PFNGLBINDBUFFERBASEPROC)load("glBindBufferBase"); 881 | glad_glTransformFeedbackVaryings = (PFNGLTRANSFORMFEEDBACKVARYINGSPROC)load("glTransformFeedbackVaryings"); 882 | glad_glGetTransformFeedbackVarying = (PFNGLGETTRANSFORMFEEDBACKVARYINGPROC)load("glGetTransformFeedbackVarying"); 883 | glad_glClampColor = (PFNGLCLAMPCOLORPROC)load("glClampColor"); 884 | glad_glBeginConditionalRender = (PFNGLBEGINCONDITIONALRENDERPROC)load("glBeginConditionalRender"); 885 | glad_glEndConditionalRender = (PFNGLENDCONDITIONALRENDERPROC)load("glEndConditionalRender"); 886 | glad_glVertexAttribIPointer = (PFNGLVERTEXATTRIBIPOINTERPROC)load("glVertexAttribIPointer"); 887 | glad_glGetVertexAttribIiv = (PFNGLGETVERTEXATTRIBIIVPROC)load("glGetVertexAttribIiv"); 888 | glad_glGetVertexAttribIuiv = (PFNGLGETVERTEXATTRIBIUIVPROC)load("glGetVertexAttribIuiv"); 889 | glad_glVertexAttribI1i = (PFNGLVERTEXATTRIBI1IPROC)load("glVertexAttribI1i"); 890 | glad_glVertexAttribI2i = (PFNGLVERTEXATTRIBI2IPROC)load("glVertexAttribI2i"); 891 | glad_glVertexAttribI3i = (PFNGLVERTEXATTRIBI3IPROC)load("glVertexAttribI3i"); 892 | glad_glVertexAttribI4i = (PFNGLVERTEXATTRIBI4IPROC)load("glVertexAttribI4i"); 893 | glad_glVertexAttribI1ui = (PFNGLVERTEXATTRIBI1UIPROC)load("glVertexAttribI1ui"); 894 | glad_glVertexAttribI2ui = (PFNGLVERTEXATTRIBI2UIPROC)load("glVertexAttribI2ui"); 895 | glad_glVertexAttribI3ui = (PFNGLVERTEXATTRIBI3UIPROC)load("glVertexAttribI3ui"); 896 | glad_glVertexAttribI4ui = (PFNGLVERTEXATTRIBI4UIPROC)load("glVertexAttribI4ui"); 897 | glad_glVertexAttribI1iv = (PFNGLVERTEXATTRIBI1IVPROC)load("glVertexAttribI1iv"); 898 | glad_glVertexAttribI2iv = (PFNGLVERTEXATTRIBI2IVPROC)load("glVertexAttribI2iv"); 899 | glad_glVertexAttribI3iv = (PFNGLVERTEXATTRIBI3IVPROC)load("glVertexAttribI3iv"); 900 | glad_glVertexAttribI4iv = (PFNGLVERTEXATTRIBI4IVPROC)load("glVertexAttribI4iv"); 901 | glad_glVertexAttribI1uiv = (PFNGLVERTEXATTRIBI1UIVPROC)load("glVertexAttribI1uiv"); 902 | glad_glVertexAttribI2uiv = (PFNGLVERTEXATTRIBI2UIVPROC)load("glVertexAttribI2uiv"); 903 | glad_glVertexAttribI3uiv = (PFNGLVERTEXATTRIBI3UIVPROC)load("glVertexAttribI3uiv"); 904 | glad_glVertexAttribI4uiv = (PFNGLVERTEXATTRIBI4UIVPROC)load("glVertexAttribI4uiv"); 905 | glad_glVertexAttribI4bv = (PFNGLVERTEXATTRIBI4BVPROC)load("glVertexAttribI4bv"); 906 | glad_glVertexAttribI4sv = (PFNGLVERTEXATTRIBI4SVPROC)load("glVertexAttribI4sv"); 907 | glad_glVertexAttribI4ubv = (PFNGLVERTEXATTRIBI4UBVPROC)load("glVertexAttribI4ubv"); 908 | glad_glVertexAttribI4usv = (PFNGLVERTEXATTRIBI4USVPROC)load("glVertexAttribI4usv"); 909 | glad_glGetUniformuiv = (PFNGLGETUNIFORMUIVPROC)load("glGetUniformuiv"); 910 | glad_glBindFragDataLocation = (PFNGLBINDFRAGDATALOCATIONPROC)load("glBindFragDataLocation"); 911 | glad_glGetFragDataLocation = (PFNGLGETFRAGDATALOCATIONPROC)load("glGetFragDataLocation"); 912 | glad_glUniform1ui = (PFNGLUNIFORM1UIPROC)load("glUniform1ui"); 913 | glad_glUniform2ui = (PFNGLUNIFORM2UIPROC)load("glUniform2ui"); 914 | glad_glUniform3ui = (PFNGLUNIFORM3UIPROC)load("glUniform3ui"); 915 | glad_glUniform4ui = (PFNGLUNIFORM4UIPROC)load("glUniform4ui"); 916 | glad_glUniform1uiv = (PFNGLUNIFORM1UIVPROC)load("glUniform1uiv"); 917 | glad_glUniform2uiv = (PFNGLUNIFORM2UIVPROC)load("glUniform2uiv"); 918 | glad_glUniform3uiv = (PFNGLUNIFORM3UIVPROC)load("glUniform3uiv"); 919 | glad_glUniform4uiv = (PFNGLUNIFORM4UIVPROC)load("glUniform4uiv"); 920 | glad_glTexParameterIiv = (PFNGLTEXPARAMETERIIVPROC)load("glTexParameterIiv"); 921 | glad_glTexParameterIuiv = (PFNGLTEXPARAMETERIUIVPROC)load("glTexParameterIuiv"); 922 | glad_glGetTexParameterIiv = (PFNGLGETTEXPARAMETERIIVPROC)load("glGetTexParameterIiv"); 923 | glad_glGetTexParameterIuiv = (PFNGLGETTEXPARAMETERIUIVPROC)load("glGetTexParameterIuiv"); 924 | glad_glClearBufferiv = (PFNGLCLEARBUFFERIVPROC)load("glClearBufferiv"); 925 | glad_glClearBufferuiv = (PFNGLCLEARBUFFERUIVPROC)load("glClearBufferuiv"); 926 | glad_glClearBufferfv = (PFNGLCLEARBUFFERFVPROC)load("glClearBufferfv"); 927 | glad_glClearBufferfi = (PFNGLCLEARBUFFERFIPROC)load("glClearBufferfi"); 928 | glad_glGetStringi = (PFNGLGETSTRINGIPROC)load("glGetStringi"); 929 | glad_glIsRenderbuffer = (PFNGLISRENDERBUFFERPROC)load("glIsRenderbuffer"); 930 | glad_glBindRenderbuffer = (PFNGLBINDRENDERBUFFERPROC)load("glBindRenderbuffer"); 931 | glad_glDeleteRenderbuffers = (PFNGLDELETERENDERBUFFERSPROC)load("glDeleteRenderbuffers"); 932 | glad_glGenRenderbuffers = (PFNGLGENRENDERBUFFERSPROC)load("glGenRenderbuffers"); 933 | glad_glRenderbufferStorage = (PFNGLRENDERBUFFERSTORAGEPROC)load("glRenderbufferStorage"); 934 | glad_glGetRenderbufferParameteriv = (PFNGLGETRENDERBUFFERPARAMETERIVPROC)load("glGetRenderbufferParameteriv"); 935 | glad_glIsFramebuffer = (PFNGLISFRAMEBUFFERPROC)load("glIsFramebuffer"); 936 | glad_glBindFramebuffer = (PFNGLBINDFRAMEBUFFERPROC)load("glBindFramebuffer"); 937 | glad_glDeleteFramebuffers = (PFNGLDELETEFRAMEBUFFERSPROC)load("glDeleteFramebuffers"); 938 | glad_glGenFramebuffers = (PFNGLGENFRAMEBUFFERSPROC)load("glGenFramebuffers"); 939 | glad_glCheckFramebufferStatus = (PFNGLCHECKFRAMEBUFFERSTATUSPROC)load("glCheckFramebufferStatus"); 940 | glad_glFramebufferTexture1D = (PFNGLFRAMEBUFFERTEXTURE1DPROC)load("glFramebufferTexture1D"); 941 | glad_glFramebufferTexture2D = (PFNGLFRAMEBUFFERTEXTURE2DPROC)load("glFramebufferTexture2D"); 942 | glad_glFramebufferTexture3D = (PFNGLFRAMEBUFFERTEXTURE3DPROC)load("glFramebufferTexture3D"); 943 | glad_glFramebufferRenderbuffer = (PFNGLFRAMEBUFFERRENDERBUFFERPROC)load("glFramebufferRenderbuffer"); 944 | glad_glGetFramebufferAttachmentParameteriv = (PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC)load("glGetFramebufferAttachmentParameteriv"); 945 | glad_glGenerateMipmap = (PFNGLGENERATEMIPMAPPROC)load("glGenerateMipmap"); 946 | glad_glBlitFramebuffer = (PFNGLBLITFRAMEBUFFERPROC)load("glBlitFramebuffer"); 947 | glad_glRenderbufferStorageMultisample = (PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC)load("glRenderbufferStorageMultisample"); 948 | glad_glFramebufferTextureLayer = (PFNGLFRAMEBUFFERTEXTURELAYERPROC)load("glFramebufferTextureLayer"); 949 | glad_glMapBufferRange = (PFNGLMAPBUFFERRANGEPROC)load("glMapBufferRange"); 950 | glad_glFlushMappedBufferRange = (PFNGLFLUSHMAPPEDBUFFERRANGEPROC)load("glFlushMappedBufferRange"); 951 | glad_glBindVertexArray = (PFNGLBINDVERTEXARRAYPROC)load("glBindVertexArray"); 952 | glad_glDeleteVertexArrays = (PFNGLDELETEVERTEXARRAYSPROC)load("glDeleteVertexArrays"); 953 | glad_glGenVertexArrays = (PFNGLGENVERTEXARRAYSPROC)load("glGenVertexArrays"); 954 | glad_glIsVertexArray = (PFNGLISVERTEXARRAYPROC)load("glIsVertexArray"); 955 | } 956 | static void load_GL_VERSION_3_1(GLADloadproc load) { 957 | if(!GLAD_GL_VERSION_3_1) return; 958 | glad_glDrawArraysInstanced = (PFNGLDRAWARRAYSINSTANCEDPROC)load("glDrawArraysInstanced"); 959 | glad_glDrawElementsInstanced = (PFNGLDRAWELEMENTSINSTANCEDPROC)load("glDrawElementsInstanced"); 960 | glad_glTexBuffer = (PFNGLTEXBUFFERPROC)load("glTexBuffer"); 961 | glad_glPrimitiveRestartIndex = (PFNGLPRIMITIVERESTARTINDEXPROC)load("glPrimitiveRestartIndex"); 962 | glad_glCopyBufferSubData = (PFNGLCOPYBUFFERSUBDATAPROC)load("glCopyBufferSubData"); 963 | glad_glGetUniformIndices = (PFNGLGETUNIFORMINDICESPROC)load("glGetUniformIndices"); 964 | glad_glGetActiveUniformsiv = (PFNGLGETACTIVEUNIFORMSIVPROC)load("glGetActiveUniformsiv"); 965 | glad_glGetActiveUniformName = (PFNGLGETACTIVEUNIFORMNAMEPROC)load("glGetActiveUniformName"); 966 | glad_glGetUniformBlockIndex = (PFNGLGETUNIFORMBLOCKINDEXPROC)load("glGetUniformBlockIndex"); 967 | glad_glGetActiveUniformBlockiv = (PFNGLGETACTIVEUNIFORMBLOCKIVPROC)load("glGetActiveUniformBlockiv"); 968 | glad_glGetActiveUniformBlockName = (PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC)load("glGetActiveUniformBlockName"); 969 | glad_glUniformBlockBinding = (PFNGLUNIFORMBLOCKBINDINGPROC)load("glUniformBlockBinding"); 970 | glad_glBindBufferRange = (PFNGLBINDBUFFERRANGEPROC)load("glBindBufferRange"); 971 | glad_glBindBufferBase = (PFNGLBINDBUFFERBASEPROC)load("glBindBufferBase"); 972 | glad_glGetIntegeri_v = (PFNGLGETINTEGERI_VPROC)load("glGetIntegeri_v"); 973 | } 974 | static void load_GL_VERSION_3_2(GLADloadproc load) { 975 | if(!GLAD_GL_VERSION_3_2) return; 976 | glad_glDrawElementsBaseVertex = (PFNGLDRAWELEMENTSBASEVERTEXPROC)load("glDrawElementsBaseVertex"); 977 | glad_glDrawRangeElementsBaseVertex = (PFNGLDRAWRANGEELEMENTSBASEVERTEXPROC)load("glDrawRangeElementsBaseVertex"); 978 | glad_glDrawElementsInstancedBaseVertex = (PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC)load("glDrawElementsInstancedBaseVertex"); 979 | glad_glMultiDrawElementsBaseVertex = (PFNGLMULTIDRAWELEMENTSBASEVERTEXPROC)load("glMultiDrawElementsBaseVertex"); 980 | glad_glProvokingVertex = (PFNGLPROVOKINGVERTEXPROC)load("glProvokingVertex"); 981 | glad_glFenceSync = (PFNGLFENCESYNCPROC)load("glFenceSync"); 982 | glad_glIsSync = (PFNGLISSYNCPROC)load("glIsSync"); 983 | glad_glDeleteSync = (PFNGLDELETESYNCPROC)load("glDeleteSync"); 984 | glad_glClientWaitSync = (PFNGLCLIENTWAITSYNCPROC)load("glClientWaitSync"); 985 | glad_glWaitSync = (PFNGLWAITSYNCPROC)load("glWaitSync"); 986 | glad_glGetInteger64v = (PFNGLGETINTEGER64VPROC)load("glGetInteger64v"); 987 | glad_glGetSynciv = (PFNGLGETSYNCIVPROC)load("glGetSynciv"); 988 | glad_glGetInteger64i_v = (PFNGLGETINTEGER64I_VPROC)load("glGetInteger64i_v"); 989 | glad_glGetBufferParameteri64v = (PFNGLGETBUFFERPARAMETERI64VPROC)load("glGetBufferParameteri64v"); 990 | glad_glFramebufferTexture = (PFNGLFRAMEBUFFERTEXTUREPROC)load("glFramebufferTexture"); 991 | glad_glTexImage2DMultisample = (PFNGLTEXIMAGE2DMULTISAMPLEPROC)load("glTexImage2DMultisample"); 992 | glad_glTexImage3DMultisample = (PFNGLTEXIMAGE3DMULTISAMPLEPROC)load("glTexImage3DMultisample"); 993 | glad_glGetMultisamplefv = (PFNGLGETMULTISAMPLEFVPROC)load("glGetMultisamplefv"); 994 | glad_glSampleMaski = (PFNGLSAMPLEMASKIPROC)load("glSampleMaski"); 995 | } 996 | static void load_GL_VERSION_3_3(GLADloadproc load) { 997 | if(!GLAD_GL_VERSION_3_3) return; 998 | glad_glBindFragDataLocationIndexed = (PFNGLBINDFRAGDATALOCATIONINDEXEDPROC)load("glBindFragDataLocationIndexed"); 999 | glad_glGetFragDataIndex = (PFNGLGETFRAGDATAINDEXPROC)load("glGetFragDataIndex"); 1000 | glad_glGenSamplers = (PFNGLGENSAMPLERSPROC)load("glGenSamplers"); 1001 | glad_glDeleteSamplers = (PFNGLDELETESAMPLERSPROC)load("glDeleteSamplers"); 1002 | glad_glIsSampler = (PFNGLISSAMPLERPROC)load("glIsSampler"); 1003 | glad_glBindSampler = (PFNGLBINDSAMPLERPROC)load("glBindSampler"); 1004 | glad_glSamplerParameteri = (PFNGLSAMPLERPARAMETERIPROC)load("glSamplerParameteri"); 1005 | glad_glSamplerParameteriv = (PFNGLSAMPLERPARAMETERIVPROC)load("glSamplerParameteriv"); 1006 | glad_glSamplerParameterf = (PFNGLSAMPLERPARAMETERFPROC)load("glSamplerParameterf"); 1007 | glad_glSamplerParameterfv = (PFNGLSAMPLERPARAMETERFVPROC)load("glSamplerParameterfv"); 1008 | glad_glSamplerParameterIiv = (PFNGLSAMPLERPARAMETERIIVPROC)load("glSamplerParameterIiv"); 1009 | glad_glSamplerParameterIuiv = (PFNGLSAMPLERPARAMETERIUIVPROC)load("glSamplerParameterIuiv"); 1010 | glad_glGetSamplerParameteriv = (PFNGLGETSAMPLERPARAMETERIVPROC)load("glGetSamplerParameteriv"); 1011 | glad_glGetSamplerParameterIiv = (PFNGLGETSAMPLERPARAMETERIIVPROC)load("glGetSamplerParameterIiv"); 1012 | glad_glGetSamplerParameterfv = (PFNGLGETSAMPLERPARAMETERFVPROC)load("glGetSamplerParameterfv"); 1013 | glad_glGetSamplerParameterIuiv = (PFNGLGETSAMPLERPARAMETERIUIVPROC)load("glGetSamplerParameterIuiv"); 1014 | glad_glQueryCounter = (PFNGLQUERYCOUNTERPROC)load("glQueryCounter"); 1015 | glad_glGetQueryObjecti64v = (PFNGLGETQUERYOBJECTI64VPROC)load("glGetQueryObjecti64v"); 1016 | glad_glGetQueryObjectui64v = (PFNGLGETQUERYOBJECTUI64VPROC)load("glGetQueryObjectui64v"); 1017 | glad_glVertexAttribDivisor = (PFNGLVERTEXATTRIBDIVISORPROC)load("glVertexAttribDivisor"); 1018 | glad_glVertexAttribP1ui = (PFNGLVERTEXATTRIBP1UIPROC)load("glVertexAttribP1ui"); 1019 | glad_glVertexAttribP1uiv = (PFNGLVERTEXATTRIBP1UIVPROC)load("glVertexAttribP1uiv"); 1020 | glad_glVertexAttribP2ui = (PFNGLVERTEXATTRIBP2UIPROC)load("glVertexAttribP2ui"); 1021 | glad_glVertexAttribP2uiv = (PFNGLVERTEXATTRIBP2UIVPROC)load("glVertexAttribP2uiv"); 1022 | glad_glVertexAttribP3ui = (PFNGLVERTEXATTRIBP3UIPROC)load("glVertexAttribP3ui"); 1023 | glad_glVertexAttribP3uiv = (PFNGLVERTEXATTRIBP3UIVPROC)load("glVertexAttribP3uiv"); 1024 | glad_glVertexAttribP4ui = (PFNGLVERTEXATTRIBP4UIPROC)load("glVertexAttribP4ui"); 1025 | glad_glVertexAttribP4uiv = (PFNGLVERTEXATTRIBP4UIVPROC)load("glVertexAttribP4uiv"); 1026 | glad_glVertexP2ui = (PFNGLVERTEXP2UIPROC)load("glVertexP2ui"); 1027 | glad_glVertexP2uiv = (PFNGLVERTEXP2UIVPROC)load("glVertexP2uiv"); 1028 | glad_glVertexP3ui = (PFNGLVERTEXP3UIPROC)load("glVertexP3ui"); 1029 | glad_glVertexP3uiv = (PFNGLVERTEXP3UIVPROC)load("glVertexP3uiv"); 1030 | glad_glVertexP4ui = (PFNGLVERTEXP4UIPROC)load("glVertexP4ui"); 1031 | glad_glVertexP4uiv = (PFNGLVERTEXP4UIVPROC)load("glVertexP4uiv"); 1032 | glad_glTexCoordP1ui = (PFNGLTEXCOORDP1UIPROC)load("glTexCoordP1ui"); 1033 | glad_glTexCoordP1uiv = (PFNGLTEXCOORDP1UIVPROC)load("glTexCoordP1uiv"); 1034 | glad_glTexCoordP2ui = (PFNGLTEXCOORDP2UIPROC)load("glTexCoordP2ui"); 1035 | glad_glTexCoordP2uiv = (PFNGLTEXCOORDP2UIVPROC)load("glTexCoordP2uiv"); 1036 | glad_glTexCoordP3ui = (PFNGLTEXCOORDP3UIPROC)load("glTexCoordP3ui"); 1037 | glad_glTexCoordP3uiv = (PFNGLTEXCOORDP3UIVPROC)load("glTexCoordP3uiv"); 1038 | glad_glTexCoordP4ui = (PFNGLTEXCOORDP4UIPROC)load("glTexCoordP4ui"); 1039 | glad_glTexCoordP4uiv = (PFNGLTEXCOORDP4UIVPROC)load("glTexCoordP4uiv"); 1040 | glad_glMultiTexCoordP1ui = (PFNGLMULTITEXCOORDP1UIPROC)load("glMultiTexCoordP1ui"); 1041 | glad_glMultiTexCoordP1uiv = (PFNGLMULTITEXCOORDP1UIVPROC)load("glMultiTexCoordP1uiv"); 1042 | glad_glMultiTexCoordP2ui = (PFNGLMULTITEXCOORDP2UIPROC)load("glMultiTexCoordP2ui"); 1043 | glad_glMultiTexCoordP2uiv = (PFNGLMULTITEXCOORDP2UIVPROC)load("glMultiTexCoordP2uiv"); 1044 | glad_glMultiTexCoordP3ui = (PFNGLMULTITEXCOORDP3UIPROC)load("glMultiTexCoordP3ui"); 1045 | glad_glMultiTexCoordP3uiv = (PFNGLMULTITEXCOORDP3UIVPROC)load("glMultiTexCoordP3uiv"); 1046 | glad_glMultiTexCoordP4ui = (PFNGLMULTITEXCOORDP4UIPROC)load("glMultiTexCoordP4ui"); 1047 | glad_glMultiTexCoordP4uiv = (PFNGLMULTITEXCOORDP4UIVPROC)load("glMultiTexCoordP4uiv"); 1048 | glad_glNormalP3ui = (PFNGLNORMALP3UIPROC)load("glNormalP3ui"); 1049 | glad_glNormalP3uiv = (PFNGLNORMALP3UIVPROC)load("glNormalP3uiv"); 1050 | glad_glColorP3ui = (PFNGLCOLORP3UIPROC)load("glColorP3ui"); 1051 | glad_glColorP3uiv = (PFNGLCOLORP3UIVPROC)load("glColorP3uiv"); 1052 | glad_glColorP4ui = (PFNGLCOLORP4UIPROC)load("glColorP4ui"); 1053 | glad_glColorP4uiv = (PFNGLCOLORP4UIVPROC)load("glColorP4uiv"); 1054 | glad_glSecondaryColorP3ui = (PFNGLSECONDARYCOLORP3UIPROC)load("glSecondaryColorP3ui"); 1055 | glad_glSecondaryColorP3uiv = (PFNGLSECONDARYCOLORP3UIVPROC)load("glSecondaryColorP3uiv"); 1056 | } 1057 | static int find_extensionsGL(void) { 1058 | if (!get_exts()) return 0; 1059 | (void)&has_ext; 1060 | free_exts(); 1061 | return 1; 1062 | } 1063 | 1064 | static void find_coreGL(void) { 1065 | 1066 | /* Thank you @elmindreda 1067 | * https://github.com/elmindreda/greg/blob/master/templates/greg.c.in#L176 1068 | * https://github.com/glfw/glfw/blob/master/src/context.c#L36 1069 | */ 1070 | int i, major, minor; 1071 | 1072 | const char* version; 1073 | const char* prefixes[] = { 1074 | "OpenGL ES-CM ", 1075 | "OpenGL ES-CL ", 1076 | "OpenGL ES ", 1077 | NULL 1078 | }; 1079 | 1080 | version = (const char*) glGetString(GL_VERSION); 1081 | if (!version) return; 1082 | 1083 | for (i = 0; prefixes[i]; i++) { 1084 | const size_t length = strlen(prefixes[i]); 1085 | if (strncmp(version, prefixes[i], length) == 0) { 1086 | version += length; 1087 | break; 1088 | } 1089 | } 1090 | 1091 | /* PR #18 */ 1092 | #ifdef _MSC_VER 1093 | sscanf_s(version, "%d.%d", &major, &minor); 1094 | #else 1095 | sscanf(version, "%d.%d", &major, &minor); 1096 | #endif 1097 | 1098 | GLVersion.major = major; GLVersion.minor = minor; 1099 | max_loaded_major = major; max_loaded_minor = minor; 1100 | GLAD_GL_VERSION_1_0 = (major == 1 && minor >= 0) || major > 1; 1101 | GLAD_GL_VERSION_1_1 = (major == 1 && minor >= 1) || major > 1; 1102 | GLAD_GL_VERSION_1_2 = (major == 1 && minor >= 2) || major > 1; 1103 | GLAD_GL_VERSION_1_3 = (major == 1 && minor >= 3) || major > 1; 1104 | GLAD_GL_VERSION_1_4 = (major == 1 && minor >= 4) || major > 1; 1105 | GLAD_GL_VERSION_1_5 = (major == 1 && minor >= 5) || major > 1; 1106 | GLAD_GL_VERSION_2_0 = (major == 2 && minor >= 0) || major > 2; 1107 | GLAD_GL_VERSION_2_1 = (major == 2 && minor >= 1) || major > 2; 1108 | GLAD_GL_VERSION_3_0 = (major == 3 && minor >= 0) || major > 3; 1109 | GLAD_GL_VERSION_3_1 = (major == 3 && minor >= 1) || major > 3; 1110 | GLAD_GL_VERSION_3_2 = (major == 3 && minor >= 2) || major > 3; 1111 | GLAD_GL_VERSION_3_3 = (major == 3 && minor >= 3) || major > 3; 1112 | if (GLVersion.major > 3 || (GLVersion.major >= 3 && GLVersion.minor >= 3)) { 1113 | max_loaded_major = 3; 1114 | max_loaded_minor = 3; 1115 | } 1116 | } 1117 | 1118 | int gladLoadGLLoader(GLADloadproc load) { 1119 | GLVersion.major = 0; GLVersion.minor = 0; 1120 | glGetString = (PFNGLGETSTRINGPROC)load("glGetString"); 1121 | if(glGetString == NULL) return 0; 1122 | if(glGetString(GL_VERSION) == NULL) return 0; 1123 | find_coreGL(); 1124 | load_GL_VERSION_1_0(load); 1125 | load_GL_VERSION_1_1(load); 1126 | load_GL_VERSION_1_2(load); 1127 | load_GL_VERSION_1_3(load); 1128 | load_GL_VERSION_1_4(load); 1129 | load_GL_VERSION_1_5(load); 1130 | load_GL_VERSION_2_0(load); 1131 | load_GL_VERSION_2_1(load); 1132 | load_GL_VERSION_3_0(load); 1133 | load_GL_VERSION_3_1(load); 1134 | load_GL_VERSION_3_2(load); 1135 | load_GL_VERSION_3_3(load); 1136 | 1137 | if (!find_extensionsGL()) return 0; 1138 | return GLVersion.major != 0 || GLVersion.minor != 0; 1139 | } 1140 | 1141 | -------------------------------------------------------------------------------- /Code/main.cpp: -------------------------------------------------------------------------------- 1 | 2 | #include "main.h" 3 | #include "AppDelegate.h" 4 | #include "cocos2d.h" 5 | 6 | USING_NS_CC; 7 | 8 | #define USE_WIN32_CONSOLE 9 | 10 | int WINAPI _tWinMain(HINSTANCE hInstance, 11 | HINSTANCE hPrevInstance, 12 | LPTSTR lpCmdLine, 13 | int nCmdShow) 14 | { 15 | UNREFERENCED_PARAMETER(hPrevInstance); 16 | UNREFERENCED_PARAMETER(lpCmdLine); 17 | #ifdef USE_WIN32_CONSOLE 18 | AllocConsole(); 19 | freopen("CONIN$", "r", stdin); 20 | freopen("CONOUT$", "w", stdout); 21 | freopen("CONOUT$", "w", stderr); 22 | #endif 23 | 24 | // create the application instance 25 | AppDelegate app; 26 | auto ret= Application::getInstance()->run(); 27 | #ifdef USE_WIN32_CONSOLE 28 | FreeConsole(); 29 | #endif 30 | return ret; 31 | } 32 | -------------------------------------------------------------------------------- /Code/main.h: -------------------------------------------------------------------------------- 1 | /**************************************************************************** 2 | Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd. 3 | 4 | http://www.cocos2d-x.org 5 | 6 | Permission is hereby granted, free of charge, to any person obtaining a copy 7 | of this software and associated documentation files (the "Software"), to deal 8 | in the Software without restriction, including without limitation the rights 9 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | copies of the Software, and to permit persons to whom the Software is 11 | furnished to do so, subject to the following conditions: 12 | 13 | The above copyright notice and this permission notice shall be included in 14 | all copies or substantial portions of the Software. 15 | 16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 | THE SOFTWARE. 23 | ****************************************************************************/ 24 | 25 | #ifndef __MAIN_H__ 26 | #define __MAIN_H__ 27 | 28 | #define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers 29 | 30 | // Windows Header Files: 31 | #include 32 | #include 33 | 34 | // C RunTime Header Files 35 | #include "platform/CCStdC.h" 36 | 37 | #endif // __MAIN_H__ 38 | -------------------------------------------------------------------------------- /Code/myGL.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include"myGL.h" 4 | 5 | //#include "std_image.h" 6 | 7 | 8 | 9 | 10 | 11 | 12 | void processInput(GLFWwindow* window) 13 | { 14 | if (glfwGetKey(window, GLFW_KEY_ESCAPE) == GLFW_PRESS) 15 | glfwSetWindowShouldClose(window, true); 16 | } 17 | 18 | void framebuffer_size_callback(GLFWwindow* window, int width, int height) 19 | { 20 | glViewport(0, 0, width, height); 21 | } 22 | 23 | 24 | void buildSphere(std::vector& vertice, 25 | std::vector& indice, 26 | int sectornum, 27 | int stacknum, 28 | float radius) 29 | { 30 | const float PI = 3.1415926f; 31 | const float sectorstep = 2 * PI / sectornum; 32 | const float stackstep = PI / stacknum; 33 | float sectorangle, stackangle; 34 | float x_y, x, y, z; 35 | unsigned int k1, k2; 36 | for (int i = 0; i <= stacknum; ++i) 37 | { 38 | stackangle = PI / 2 - i * stackstep; 39 | x_y = radius * cos(stackangle); 40 | z = radius * sin(stackangle); 41 | k1 = i * (sectornum + 1); 42 | k2 = k1 + sectornum + 1; 43 | for (int j = 0; j <= sectornum; ++j, ++k1, ++k2) 44 | { 45 | sectorangle = j * sectorstep; 46 | x = x_y * cos(sectorangle); 47 | y = x_y * sin(sectorangle); 48 | vertice.push_back(x); 49 | vertice.push_back(y); 50 | vertice.push_back(z); 51 | vertice.push_back(float(j) / sectornum); 52 | vertice.push_back(float(i) / stacknum); 53 | vertice.push_back(x / radius); 54 | vertice.push_back(y / radius); 55 | vertice.push_back(z / radius); 56 | if (i < stacknum && j < sectornum) { 57 | if (i != 0) 58 | { 59 | indice.push_back(k1); 60 | indice.push_back(k2); 61 | indice.push_back(k1 + 1); 62 | } 63 | if (i != (stacknum - 1)) 64 | { 65 | indice.push_back(k1 + 1); 66 | indice.push_back(k2); 67 | indice.push_back(k2 + 1); 68 | } 69 | } 70 | } 71 | } 72 | } 73 | 74 | unsigned int createShader(const char* vpath, const char* fpath) 75 | { 76 | std::string vertexGLSL; 77 | std::string fragmentGLSL; 78 | std::ifstream vertexFile(vpath); 79 | std::ifstream fragmentFile(fpath); 80 | std::stringstream vertexStream, fragmentStream; 81 | vertexStream << vertexFile.rdbuf(); 82 | fragmentStream << fragmentFile.rdbuf(); 83 | vertexFile.close(); 84 | fragmentFile.close(); 85 | vertexGLSL = vertexStream.str(); 86 | fragmentGLSL = fragmentStream.str(); 87 | const char* vertexGLSL_C = vertexGLSL.c_str(); 88 | const char* fragmentGLSL_C = fragmentGLSL.c_str(); 89 | unsigned int vertex, fragment; 90 | 91 | int success; 92 | char infoLog[1024]; 93 | vertex = glCreateShader(GL_VERTEX_SHADER); 94 | glShaderSource(vertex, 1, &vertexGLSL_C, NULL); 95 | glCompileShader(vertex); 96 | glGetShaderiv(vertex, GL_COMPILE_STATUS, &success); 97 | if (!success) 98 | { 99 | glGetShaderInfoLog(vertex, 512, NULL, infoLog); 100 | std::cout << "ERROR::SHADER::VERTEX::COMPILATION_FAILED\n" << infoLog << std::endl; 101 | } 102 | fragment = glCreateShader(GL_FRAGMENT_SHADER); 103 | glShaderSource(fragment, 1, &fragmentGLSL_C, NULL); 104 | glCompileShader(fragment); 105 | glGetShaderiv(fragment, GL_COMPILE_STATUS, &success); 106 | if (!success) 107 | { 108 | glGetShaderInfoLog(fragment, 512, NULL, infoLog); 109 | std::cout << "ERROR::SHADER::FRAGMENT::COMPILATION_FAILED\n" << infoLog << std::endl; 110 | } 111 | unsigned Shader_ID = glCreateProgram(); 112 | glAttachShader(Shader_ID, vertex); 113 | glAttachShader(Shader_ID, fragment); 114 | glLinkProgram(Shader_ID); 115 | glGetShaderiv(Shader_ID, GL_COMPILE_STATUS, &success); 116 | if (!success) 117 | { 118 | glGetProgramInfoLog(Shader_ID, 512, NULL, infoLog); 119 | std::cout << "ERROR::SHADER::PROGRAM::LINKING_FAILED\n" << infoLog << std::endl; 120 | } 121 | glDeleteShader(vertex); 122 | glDeleteShader(fragment); 123 | return Shader_ID; 124 | } 125 | 126 | GLFWwindow* initialize_GL_and_Window(int e1, int e2, int width, int height, const char* wName) 127 | { 128 | glfwInit(); 129 | glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, e1); 130 | glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, e2); 131 | glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); 132 | GLFWwindow* window = glfwCreateWindow(width, height, "Colorful Cube", NULL, NULL); 133 | glfwMakeContextCurrent(window); 134 | glfwSetFramebufferSizeCallback(window, framebuffer_size_callback); 135 | if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress)) 136 | { 137 | std::cout << "Initialize GLAD failure" << std::endl; 138 | exit(1); 139 | } 140 | return window; 141 | } 142 | 143 | unsigned load_texture(const char* filename,unsigned&texture) 144 | { 145 | glGenTextures(1, &texture); 146 | glBindTexture(GL_TEXTURE_2D, texture); 147 | glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); 148 | glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); 149 | glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); 150 | glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); 151 | glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR); 152 | glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR_MIPMAP_LINEAR); 153 | auto im = cv::imread(filename); 154 | cv::cvtColor(im, im, cv::COLOR_BGR2RGB); 155 | 156 | glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, im.cols, im.rows, 0, GL_RGB, GL_UNSIGNED_BYTE, im.data); 157 | glGenerateMipmap(GL_TEXTURE_2D); 158 | 159 | return texture; 160 | } 161 | 162 | void vec3_to_shader(unsigned shader_id, const char* vecname, glm::vec3& uniform) { 163 | unsigned int loc = glGetUniformLocation(shader_id, vecname); 164 | glUniform3fv(loc, 1, &uniform[0]); 165 | } 166 | void mat4_to_shader(unsigned shader_id, const char* vecname, glm::mat4& uniform) { 167 | unsigned int loc = glGetUniformLocation(shader_id, vecname); 168 | glUniformMatrix4fv(loc, 1, GL_FALSE, glm::value_ptr(uniform)); 169 | } 170 | 171 | 172 | 173 | -------------------------------------------------------------------------------- /Code/myGL.h: -------------------------------------------------------------------------------- 1 | #ifndef GL_H 2 | #define GL_H 3 | //#include 4 | #include 5 | #include 6 | #include 7 | #include 8 | #include 9 | #include 10 | 11 | #include 12 | 13 | // 14 | #include 15 | #include 16 | #include 17 | 18 | 19 | 20 | void processInput(GLFWwindow* window); 21 | 22 | void framebuffer_size_callback 23 | ( 24 | GLFWwindow* window, 25 | int width, 26 | int height 27 | ); 28 | 29 | GLFWwindow* initialize_GL_and_Window 30 | ( 31 | int e1, 32 | int e2, 33 | int width, 34 | int height, 35 | const char* wName 36 | ); 37 | 38 | 39 | void buildSphere 40 | ( 41 | std::vector& vertice, 42 | std::vector& indice, 43 | int sectornum, 44 | int stacknum, 45 | float radius 46 | ); 47 | 48 | unsigned load_texture(const char* filename,unsigned&texture); 49 | 50 | unsigned int createShader(const char* vpath, const char* fpath); 51 | 52 | void vec3_to_shader 53 | ( 54 | unsigned shader_id, 55 | const char* vecname, 56 | glm::vec3& uniform 57 | ); 58 | 59 | void mat4_to_shader( 60 | unsigned shader_id, 61 | const char* vecname, 62 | glm::mat4& uniform 63 | ); 64 | 65 | 66 | 67 | #endif -------------------------------------------------------------------------------- /Code/ray_tracing.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | #include 5 | #include 6 | #include "ray_tracing_tools_amp.h" 7 | #include "crossable_amp.h" 8 | #include "ray_tracing.h" 9 | #include 10 | #include 11 | #include 12 | #include 13 | #include 14 | #include "GlobalVar.h" 15 | using namespace std; 16 | using namespace ray_tracing; 17 | using namespace concurrency; 18 | using namespace concurrency::fast_math; 19 | using namespace concurrency::graphics; 20 | #define len(a) (sizeof(a) / sizeof(a[0])) 21 | 22 | #define cons_inf (1e10f) 23 | #define cons_pi (3.14159265f) 24 | #define cons_2_pi (3.14159265f * 2.0f) 25 | #define cons_pi_2 (3.14159265f / 2.0f) 26 | 27 | #define cons_sample_phong_cnt 64 28 | #define cons_pixel_sample_cnt 2 29 | #define cons_soft_shadow_sample_cnt 64 30 | 31 | //#define ONLY_PHONG 32 | #define RETURN_SHADOW_FACTOR 33 | //#define ONLY_SAMPLE 34 | 35 | point_light point_lights[]{ 36 | {{0, 0, 30}, {1.0f, 0.99f, 0.8f}, 1.0f, 0.09f, 0.032f} 37 | }; 38 | 39 | material materials[]{ 40 | {0.5f, 1.0f, 0.5f, 4.0f, init_color(ff, ff, ff) }, //white 41 | {0.5f, 1.0f, 0.5f, 4.0f, init_color(cc, 22, 08) }, //red 42 | {0.5f, 1.0f, 0.5f, 4.0f, init_color(ff, b7, 00) }, //yellow 43 | {0.5f, 1.0f, 0.5f, 4.0f, init_color(33, 80, 00) }, //green 44 | {0.5f, 1.0f, 0.5f, 4.0f, init_color(80, 3c, 00) }, //brown 45 | {0.5f, 1.0f, 0.5f, 4.0f, init_color(00, 36, cc) }, //blue 46 | {0.5f, 1.0f, 0.5f, 4.0f, init_color(33, 33, 33) }, //black 47 | {0.15f, 1.0f, 0.05f, 32.0f, {0.0f, 0.4f, 0.0f} }, //no reflection green 48 | {0.5f, 1.0f, 0.5f, 4.0f, init_color(ff, aa, aa) }, //pink 49 | {0.5f, 1.0f, 0.5f, 4.0f, init_color(ff, 00, ff) }, //purple 50 | {0.5f, 1.0f, 0.5f, 4.0f, init_color(ff, aa, 00) }, //orange 51 | {0.5f, 1.0f, 0.5f, 4.0f, init_color(00, 00, 00) }, //black 52 | {0.5f, 1.0f, 0.5f, 4.0f, init_color(80, 3c, 00) }, //brown 53 | {0.5f, 1.0f, 0.5f, 4.0f, init_color(00, 36, cc) }, //blue 54 | {0.5f, 1.0f, 0.5f, 4.0f, init_color(33, 33, 33) }, //black 55 | 56 | }; 57 | 58 | #define set_params_random arr_random, current_random_index 59 | #define def_params_random const concurrency::array_view& arr_random, uint& current_random_index 60 | 61 | #define set_params_crossables arr_triangles, arr_spheres 62 | #define def_params_crossables const concurrency::array& arr_triangles, \ 63 | const concurrency::array& arr_spheres 64 | 65 | #define set_params_light_sources arr_point_lights 66 | #define def_params_light_sources const concurrency::array& arr_point_lights 67 | 68 | #define set_params_debug arr_debug 69 | #define def_params_debug concurrency::array_view& arr_debug 70 | 71 | inline float randf(def_params_random) restrict(amp) { 72 | //return xorshift(set_params_random) * 1.0f / 0xffffffff; 73 | current_random_index = (current_random_index + 1); 74 | return arr_random[current_random_index]; 75 | } 76 | 77 | inline float_3 get_ambient_color() restrict(amp) { 78 | return float_3(0.0f, 0.0f, 0.0f); 79 | } 80 | 81 | inline uint make_id_triangle(uint id) restrict(amp) { 82 | return id | 0x00000000; 83 | } 84 | 85 | inline uint make_id_sphere(uint id) restrict(amp) { 86 | return id | 0x00010000; 87 | } 88 | 89 | inline bool try_parse_id_triangle(uint& id) restrict(amp) { 90 | return ((id & 0xffff0000) == 0x00000000); 91 | } 92 | 93 | inline bool try_parse_id_sphere(uint& id) restrict(amp) { 94 | if (((id & 0xffff0000) == 0x00010000)) { 95 | id &= 0x0000ffff; 96 | return true; 97 | } 98 | else return false; 99 | } 100 | 101 | inline float_3 get_normal(uint id, const float_3& at, def_params_crossables) restrict(amp) { 102 | if (try_parse_id_triangle(id)) { 103 | return arr_triangles[id].n; 104 | } 105 | else if (try_parse_id_sphere(id)) { 106 | return get_normal(arr_spheres[id], at); 107 | } 108 | } 109 | 110 | inline uint get_material_id(uint id, def_params_crossables) restrict(amp) { 111 | if (try_parse_id_triangle(id)) { 112 | return arr_triangles[id].material_id; 113 | } 114 | else if (try_parse_id_sphere(id)) { 115 | return arr_spheres[id].material_id; 116 | } 117 | } 118 | 119 | inline bool check_cross(const float_3& original_point, const float_3& dir, float& alpha, uint ignore, 120 | uint& crossable_index, def_params_crossables) restrict(amp) { 121 | float min_alpha = 1e10f; 122 | uint cid; 123 | for (uint i = 0; i < arr_triangles.extent.size(); ++i) { 124 | cid = make_id_triangle(i); 125 | if (cid == ignore) continue; 126 | if (arr_triangles[i].check_cross(original_point, dir, alpha) 127 | && alpha < min_alpha) { 128 | min_alpha = alpha; 129 | crossable_index = cid; 130 | } 131 | } 132 | 133 | for (uint i = 0; i < arr_spheres.extent.size(); ++i) { 134 | cid = make_id_sphere(i); 135 | if (cid == ignore) continue; 136 | if (arr_spheres[i].check_cross(original_point, dir, alpha, min_alpha) && alpha < min_alpha) { 137 | min_alpha = alpha; 138 | crossable_index = cid; 139 | } 140 | } 141 | 142 | alpha = min_alpha; 143 | return min_alpha != 1e10f; 144 | } 145 | 146 | inline float_3 random_direction(const float_3& normal, const float_3& n_1, 147 | const float_3& n_2, def_params_random) restrict(amp) { 148 | float radius = randf(set_params_random) * 0.8f; 149 | float height = sqrt(1.0f - radius * radius); 150 | float select = randf(set_params_random) * 4.0f; 151 | float select_1, select_2; 152 | if (select < 1.0f) { 153 | select_1 = select; 154 | select_2 = sqrt(1.0f - select_1 * select_1); 155 | } 156 | else if (select < 2.0f) { 157 | select_1 = - (select - 1.0f); 158 | select_2 = sqrt(1.0f - select_1 * select_1); 159 | } 160 | else if (select < 3.0f) { 161 | select_1 = -(select - 2.0f); 162 | select_2 = -sqrt(1.0f - select_1 * select_1); 163 | } 164 | else { 165 | select_1 = select - 3.0f; 166 | select_2 = -sqrt(1.0f - select_1 * select_1); 167 | } 168 | float_3 r = select_1 * n_1 + select_2 * n_2; 169 | return normal * height + r * radius; 170 | } 171 | 172 | inline float_3 render_phong(uint current_crossable, const float_3& current_point, 173 | const float_3& view_dir, 174 | const float_3& current_normal, 175 | const material& current_material, 176 | const bool soft_shadow, 177 | def_params_light_sources, 178 | def_params_crossables, 179 | def_params_random) restrict(amp) { 180 | float_3 result(0.0f, 0.0f, 0.0f); 181 | float ignore_float; 182 | uint ignore_uint; 183 | for (uint i = 0; i < arr_point_lights.extent[0]; ++i) { 184 | float_3 dir_to_ls = arr_point_lights[i].loc - current_point; 185 | float far_to_ls = length(dir_to_ls); 186 | dir_to_ls /= far_to_ls; 187 | if (dot(current_normal, dir_to_ls) < 0) continue; 188 | if (soft_shadow) { 189 | float_3 delta, dir_to_ls_new; 190 | uint pass_cnt = 0; 191 | for (uint j = 0; j < cons_soft_shadow_sample_cnt; ++j) { 192 | delta = { randf(set_params_random) * 2.0f - 1.0f, 193 | randf(set_params_random) * 2.0f - 1.0f, 194 | randf(set_params_random) * 2.0f - 1.0f }; 195 | dir_to_ls_new = normalize(arr_point_lights[i].loc + delta - current_point); 196 | if (!check_cross(current_point, dir_to_ls_new, ignore_float, 197 | current_crossable, ignore_uint, set_params_crossables) || 198 | ignore_float > far_to_ls) { 199 | ++pass_cnt; 200 | } 201 | continue; 202 | } 203 | #ifdef RETURN_SHADOW_FACTOR 204 | result.x = (pass_cnt * 1.0f / cons_soft_shadow_sample_cnt); 205 | result.y = result.x; 206 | result.z = result.x; 207 | #else 208 | result = pass_cnt * 1.0f / cons_soft_shadow_sample_cnt * 209 | arr_point_lights[i].get_intensity(current_point, current_normal, 210 | dir_to_ls, current_material); 211 | #endif 212 | } 213 | else { 214 | if (!check_cross(current_point, dir_to_ls, ignore_float, 215 | current_crossable, ignore_uint, 216 | set_params_crossables) || ignore_float >= far_to_ls) { 217 | result = result + arr_point_lights[i].get_intensity(current_point, 218 | current_normal, dir_to_ls, current_material); 219 | } 220 | } 221 | } 222 | return result; 223 | } 224 | 225 | inline float_3 sample_phong(const float_3& current_point, const float_3& normal, const float_3& view_dir, uint sample_cnt, 226 | uint current_crossable, const concurrency::array& arr_materials, 227 | def_params_crossables, 228 | def_params_light_sources, 229 | def_params_random) restrict(amp) { 230 | #ifdef ONLY_PHONG 231 | return 0.0f; 232 | #endif 233 | float_3 new_dir, res(0.0f, 0.0f, 0.0f); 234 | float alpha, cos_theta; 235 | uint crossable_id; 236 | 237 | float_3 n_1, n_2; 238 | if (normal.z != 0.0f) n_1 = float_3(1.0f, 1.0f, -(normal.x + normal.y) / normal.z); 239 | else if (normal.y != 0.0f) n_1 = float_3(1.0f, -(normal.x + normal.z) / normal.y, 1.0f); 240 | else n_1 = float_3(-(normal.y + normal.z) / normal.x, 1.0f, 1.0f); 241 | n_2 = normalize(cross(n_1, normal)); 242 | n_1 = normalize(n_1); 243 | 244 | material this_material = arr_materials[get_material_id(current_crossable, set_params_crossables)]; 245 | material current_material; 246 | 247 | for (uint i = 0; i < sample_cnt; ++i) { 248 | new_dir = random_direction(normal, n_1, n_2, set_params_random); 249 | float brdf = this_material.brdf(-new_dir, -view_dir , normal); 250 | if (brdf < 1e-3f) continue; 251 | //render phong 252 | if (check_cross(current_point, new_dir, alpha, current_crossable, crossable_id, set_params_crossables)) { 253 | float_3 cross_point = current_point + new_dir * alpha; 254 | float_3 cross_norm = get_normal(crossable_id, cross_point, set_params_crossables); 255 | if (dot(cross_norm, new_dir) > 0) cross_norm = -cross_norm; 256 | current_material = arr_materials[get_material_id(crossable_id, set_params_crossables)]; 257 | res = res + render_phong(crossable_id, cross_point, new_dir, cross_norm, 258 | current_material, false, set_params_light_sources, set_params_crossables, set_params_random) 259 | * this_material.color * brdf; 260 | } 261 | } 262 | 263 | return res / (float)sample_cnt; 264 | } 265 | 266 | inline float_3 sample_all(const float_3& original_point, const float_3& view_dir, 267 | float_3& sample_phong_res, float_3& render_phong_res, 268 | const concurrency::array& arr_materials, 269 | def_params_crossables, def_params_light_sources, def_params_random) restrict(amp) { 270 | float alpha; 271 | uint crossable_index = 0; 272 | if (!check_cross(original_point, view_dir, alpha, -1, crossable_index, set_params_crossables)) 273 | return sample_phong_res = render_phong_res = float_3(0.0f, 0.0f, 0.0f); 274 | float_3 cross_point = original_point + view_dir * alpha; 275 | float_3 normal = get_normal(crossable_index, cross_point, set_params_crossables); 276 | if (dot(view_dir, normal) > 0) normal = -normal; 277 | material material = arr_materials[get_material_id(crossable_index, set_params_crossables)]; 278 | //set small offset and render phong 279 | #ifndef ONLY_SAMPLE 280 | render_phong_res = render_phong(crossable_index, cross_point, view_dir, 281 | normal, material, true, set_params_light_sources, set_params_crossables, set_params_random); 282 | #else 283 | render_phong_res = 0.0f; 284 | #endif 285 | if (crossable_index & 0xffff0000) { 286 | sample_phong_res = sample_phong(cross_point, normal, view_dir, 287 | cons_sample_phong_cnt * cons_pixel_sample_cnt, 288 | crossable_index, arr_materials, set_params_crossables, 289 | set_params_light_sources, set_params_random); 290 | } 291 | else sample_phong_res = 0.0f; 292 | return sample_phong_res + render_phong_res; 293 | } 294 | 295 | ray_tracing_controller::ray_tracing_controller(){ 296 | srand(time(0)); 297 | for (int i = 0; i < VIEW_ROW; ++i) 298 | for (int j = 0; j < VIEW_COL; ++j) 299 | self_arr_random_init[index<2>(i,j)] 300 | = rand() % RANDOM_TABLE_SIZE; 301 | for (int i = 0; i < RANDOM_TABLE_SIZE; ++i) 302 | self_arr_random[i] = rand() * 1.0f / RAND_MAX; 303 | 304 | float width_d_height = VIEW_COL * 1.0f / VIEW_ROW; 305 | float real_width = 2.0f * MIN_VIEW * tan(FOV / 360.0f * cons_pi) * width_d_height; 306 | view_resolusion = real_width / VIEW_COL; 307 | } 308 | 309 | void ray_tracing_controller::render() { 310 | update_messages(); 311 | const float_3 hori = normalize(cross(camera_up, look_at)) * -1.0; 312 | const float_3 vert = normalize(cross(look_at, hori)); 313 | const float_3 origin = eye + normalize(look_at) * MIN_VIEW 314 | - hori * (VIEW_COL / 2 * view_resolusion) 315 | - vert * (VIEW_ROW / 2 * view_resolusion); 316 | const float this_view_resolusion = view_resolusion; 317 | const float_3 this_eye = eye; 318 | 319 | concurrency::array arr_spheres(len(spheres), spheres); 320 | concurrency::array arr_triangles(len(triangles), triangles); 321 | concurrency::array_view arr_sample_results((int)VIEW_ROW, (int)VIEW_COL); 322 | concurrency::array_view arr_render_results((int)VIEW_ROW, (int)VIEW_COL); 323 | concurrency::array arr_materials(len(materials), materials); 324 | concurrency::array arr_point_lights(len(point_lights), point_lights); 325 | concurrency::array_view arr_random_init(self_arr_random_init); 326 | concurrency::array_view arr_random(self_arr_random); 327 | 328 | parallel_for_each(arr_sample_results.extent, 329 | [=, &arr_materials, &arr_point_lights, 330 | &arr_triangles, &arr_spheres](index<2> idx) restrict(amp) { 331 | uint r = idx[0], c = idx[1]; 332 | float_3 o = origin + hori * c * this_view_resolusion + 333 | vert * r * this_view_resolusion; 334 | float_3 delta = normalize(o - this_eye); 335 | uint& current_random_index = arr_random_init[idx]; 336 | sample_all(o, delta, arr_sample_results[idx], 337 | arr_render_results[idx], arr_materials, 338 | set_params_crossables, set_params_light_sources, set_params_random); 339 | }); 340 | 341 | #ifndef RETURN_SHADOW_FACTOR 342 | for(uint i = 0; i < VIEW_ROW; ++i) 343 | for (uint j = 0; j < VIEW_COL; ++j) { 344 | index<2> idx(i, j); 345 | float_3 res = arr_render_results[idx] + 346 | arr_sample_results[idx]; 347 | results[i][j][0] = res.r; 348 | results[i][j][1] = res.g; 349 | results[i][j][2] = res.b; 350 | } 351 | #else 352 | for(uint i = 0; i < VIEW_ROW; ++i) 353 | for (uint j = 0; j < VIEW_COL; ++j) { 354 | index<2> idx(i, j); 355 | float shadow_res = arr_render_results[idx].x; 356 | float_3 sample_res = arr_sample_results[idx]; 357 | shadow_factor[i][j] = shadow_res; 358 | sample_results[i][j][0] = sample_res.x; 359 | sample_results[i][j][1] = sample_res.y; 360 | sample_results[i][j][2] = sample_res.z; 361 | } 362 | #endif 363 | 364 | set_results(); 365 | } 366 | 367 | float_3 seteye = float_3(0.0f, 0.0f, 5.0f); 368 | float_3 setlook_at = float_3(1.0f, 0.0f, 0.0f); 369 | float_3 setcamera_up = float_3(0.0f, 0.0f, 1.0f); 370 | 371 | void ray_tracing_controller::update_messages() { 372 | eye.x = camera_eye[0]; 373 | eye.y = camera_eye[1]; 374 | eye.z = camera_eye[2]; 375 | look_at.x = camera_look_at[0]; 376 | look_at.y = camera_look_at[1]; 377 | look_at.z = camera_look_at[2]; 378 | camera_up = setcamera_up; 379 | 380 | triangles[0] = init_triangle(125, 65, -3, 125, -65, -3, -125, -65, -3, 7); 381 | triangles[1] = init_triangle(-125, -65, -3, -125, 65, -3, 125, 65, -3, 7); 382 | 383 | uint p0 = 0, p1 = 1, p2 = 2, p3 = 3, p4 = 4, p5 = 5, p6 = 6, p7 = 1, p8 = 2, p9 = 3, p10 = 4, uzero = 0, utrue = 1; 384 | spheres[0] = init_sphere(ball_positions[0][0], ball_positions[0][1], ball_positions[0][2], 3, (ball_selected[0]?p0:0), (ball_die[0]?uzero:utrue)); 385 | spheres[1] = init_sphere(ball_positions[1][0], ball_positions[1][1], ball_positions[1][2], 3, (ball_selected[1]?p0:2), (ball_die[1]?uzero:utrue)); 386 | spheres[2] = init_sphere(ball_positions[2][0], ball_positions[2][1], ball_positions[2][2], 3, (ball_selected[2]?p0:5), (ball_die[2]?uzero:utrue)); 387 | spheres[3] = init_sphere(ball_positions[3][0], ball_positions[3][1], ball_positions[3][2], 3, (ball_selected[3]?p0:8), (ball_die[3]?uzero:utrue)); 388 | spheres[4] = init_sphere(ball_positions[4][0], ball_positions[4][1], ball_positions[4][2], 3, (ball_selected[4]?p0:3), (ball_die[4]?uzero:utrue)); 389 | spheres[5] = init_sphere(ball_positions[5][0], ball_positions[5][1], ball_positions[5][2], 3, (ball_selected[5]?p0:1), (ball_die[5]?uzero:utrue)); 390 | spheres[6] = init_sphere(ball_positions[6][0], ball_positions[6][1], ball_positions[6][2], 3, (ball_selected[6]?p0:10), (ball_die[6]?uzero:utrue)); 391 | spheres[7] = init_sphere(ball_positions[7][0], ball_positions[7][1], ball_positions[7][2], 3, (ball_selected[7]?p0:9), (ball_die[7]?uzero:utrue)); 392 | spheres[8] = init_sphere(ball_positions[8][0], ball_positions[8][1], ball_positions[8][2], 3, (ball_selected[8]?p0:7), (ball_die[8]?uzero:utrue)); 393 | spheres[9] = init_sphere(ball_positions[9][0], ball_positions[9][1], ball_positions[9][2], 3, (ball_selected[9]?p0:4), (ball_die[9]?uzero:utrue)); 394 | } 395 | 396 | //cv::Mat view; 397 | void ray_tracing_controller::set_results() { 398 | #ifdef RETURN_SHADOW_FACTOR 399 | return; 400 | #elif 401 | uchar* view_ptr = view_global.ptr(); 402 | for (uint i = 0; i < VIEW_ROW; ++i) 403 | for (uint j = 0; j < VIEW_COL; ++j) { 404 | *(view_ptr++) = (int)(min(results[i][j][2], 1.0f) * 255.0f); 405 | *(view_ptr++) = (int)(min(results[i][j][1], 1.0f) * 255.0f); 406 | *(view_ptr++) = (int)(min(results[i][j][0], 1.0f) * 255.0f); 407 | } 408 | #endif 409 | } -------------------------------------------------------------------------------- /Code/ray_tracing.h: -------------------------------------------------------------------------------- 1 | #ifndef H_RAY_TRACING 2 | #define H_RAY_TRACING 3 | #include "crossable_amp.h" 4 | using namespace ray_tracing; 5 | 6 | #define init_triangle(ax, ay, az, bx, by, bz, cx, cy, cz, material_id) \ 7 | {{ax, ay, az}, {bx, by, bz}, {cx, cy, cz}, \ 8 | normalize(cross(float_3(bx, by, bz) - float_3(ax, ay, az), \ 9 | float_3(cx, cy, cz) - float_3(ax, ay, az))), material_id, \ 10 | /*{max(max(ax, bx), cx), max(max(ay, by), cy), max(max(az, bz), cz)}, \ 11 | {min(min(ax, bx), cx), min(min(ay, by), cy), min(min(az, bz), cz)}*/} 12 | 13 | #define init_sphere(ox, oy, oz, r, material_id, visible) \ 14 | {{ox, oy, oz}, r, material_id, visible/*, {ox + r, oy + r, oz + r}, {ox - r, oy - r, oz - r}*/} 15 | 16 | #define init_color(r, g, b) \ 17 | {0x##r / 255.0f, 0x##g / 255.0f, 0x##b / 255.0f} 18 | 19 | const uint VIEW_ROW = 600u; 20 | const uint VIEW_COL = 800u; 21 | const uint RANDOM_TABLE_SIZE = 100000u; 22 | const float FOV = 60.0f; 23 | const float MIN_VIEW = 0.1f; 24 | 25 | struct ray_tracing_controller { 26 | ray_tracing_controller(); 27 | void render(); 28 | private: 29 | void update_messages(); 30 | void set_results(); 31 | 32 | float results[VIEW_ROW][VIEW_COL][3]; //rgb 33 | 34 | array_view self_arr_random = array_view(RANDOM_TABLE_SIZE); 35 | array_view self_arr_random_init = array_view((int)VIEW_ROW, (int)VIEW_COL); 36 | 37 | float view_resolusion; 38 | float_3 eye; 39 | float_3 look_at; 40 | float_3 camera_up; 41 | 42 | triangle triangles[2]; 43 | 44 | sphere spheres[10]; 45 | }; 46 | 47 | #endif -------------------------------------------------------------------------------- /Code/ray_tracing_tools_amp.h: -------------------------------------------------------------------------------- 1 | #ifndef H_RAY_TRACING_TOOLS_AMP 2 | #define H_RAY_TRACING_TOOLS_AMP 3 | #include 4 | #include 5 | 6 | using namespace concurrency; 7 | using namespace concurrency::fast_math; 8 | using namespace concurrency::graphics; 9 | 10 | inline float_3 cross(const float_3& A, const float_3& B) restrict(amp) { 11 | return float_3(A.y * B.z - A.z * B.y, 12 | A.z * B.x - A.x * B.z, 13 | A.x * B.y - A.y * B.x); 14 | } 15 | 16 | inline float dot(const float_3& A, const float_3& B) restrict(amp) { 17 | return A.x * B.x + A.y * B.y + A.z * B.z; 18 | } 19 | 20 | inline float length(const float_3& A) restrict(amp) { 21 | return sqrtf(A.x * A.x + A.y * A.y + A.z * A.z); 22 | } 23 | 24 | inline float_3 normalize(const float_3& A) restrict(amp) { 25 | return A / length(A); 26 | } 27 | 28 | 29 | inline float_3 cross(const float_3& A, const float_3& B) { 30 | return float_3(A.y * B.z - A.z * B.y, 31 | A.z * B.x - A.x * B.z, 32 | A.x * B.y - A.y * B.x); 33 | } 34 | 35 | inline float dot(const float_3& A, const float_3& B) { 36 | return A.x * B.x + A.y * B.y + A.z * B.z; 37 | } 38 | 39 | inline float length(const float_3& A) { 40 | return sqrtf(A.x * A.x + A.y * A.y + A.z * A.z); 41 | } 42 | 43 | inline float_3 normalize(const float_3& A) { 44 | return A / length(A); 45 | } 46 | 47 | 48 | #endif -------------------------------------------------------------------------------- /Code/res/game.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ganler/bimulator/9021a3aa72b394bad552fedb4b68dfec135e08e4/Code/res/game.ico -------------------------------------------------------------------------------- /Code/res/pep.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ganler/bimulator/9021a3aa72b394bad552fedb4b68dfec135e08e4/Code/res/pep.ico -------------------------------------------------------------------------------- /Code/resource.h: -------------------------------------------------------------------------------- 1 | /**************************************************************************** 2 | Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd. 3 | 4 | http://www.cocos2d-x.org 5 | 6 | Permission is hereby granted, free of charge, to any person obtaining a copy 7 | of this software and associated documentation files (the "Software"), to deal 8 | in the Software without restriction, including without limitation the rights 9 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | copies of the Software, and to permit persons to whom the Software is 11 | furnished to do so, subject to the following conditions: 12 | 13 | The above copyright notice and this permission notice shall be included in 14 | all copies or substantial portions of the Software. 15 | 16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 | THE SOFTWARE. 23 | ****************************************************************************/ 24 | 25 | //{{NO_DEPENDENCIES}} 26 | // Microsoft Visual C++ generated include file. 27 | // Used by game.RC 28 | // 29 | 30 | #define IDS_PROJNAME 100 31 | #define IDR_TESTJS 100 32 | 33 | #define ID_FILE_NEW_WINDOW 32771 34 | 35 | // Next default values for new objects 36 | // 37 | #ifdef APSTUDIO_INVOKED 38 | #ifndef APSTUDIO_READONLY_SYMBOLS 39 | #define _APS_NEXT_RESOURCE_VALUE 201 40 | #define _APS_NEXT_CONTROL_VALUE 1000 41 | #define _APS_NEXT_SYMED_VALUE 101 42 | #define _APS_NEXT_COMMAND_VALUE 32775 43 | #endif 44 | #endif 45 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Bimulator 2 | 3 | > **Course project of CG(2019 fall)**: A billiard simulator using both ray tracing and graphics pipeline. 4 | 5 | ## Group Members 6 | 7 | **Jiawei Liu**(@[ganler](https://github.com/ganler)) => Graphics Pipeline + Merging + Document + Project Management 8 | 9 | **Xiaodong Bi**(@[bxdd](https://github.com/bxdd)) => Framework + Physical Engine(`Box2D`) + Document 10 | 11 | **Zhengrui Qin**(@[MilesChing](https://github.com/MilesChing)) =>Ray Tracing + Document 12 | 13 | **Xumai Qi** => Graphics Pipeline + Merging + Document 14 | 15 | **Xiaowei Liu** => Document 16 | 17 | **Xin Wen** => Document 18 | 19 | > *Our group is advised by [Prof. Junqiao Zhao](https://scholar.google.com/citations?user=KPHJVAwAAAAJ&hl=en). Jiawei and Xiaodong take the lead in this project. 20 | > *[Course Page](http://cs1.tongji.edu.cn/courses/CS100433/) 21 | > *[Our project is also available in the course page](http://cs1.tongji.edu.cn/courses/CS100433/CS100433_StudentProjects_2019.html#group5) 22 | 23 | ## What is a "bimulator"? 24 | 25 | - Billiard Simulator. 26 | - Physical Engine(`Box2D`) to simulate the movement of billiards. 27 | - [**impl.**] Graphics pipeline. 28 | - [**impl.**] Real-time ray tracing. (*Zhengrui Qin* also maintained his `WenTracing` in his [repo](https://github.com/MilesChing/WenTracing)) 29 | - [**merge**] merged using pixel shader(implemented via fragments shader). 30 | 31 | ## Demos 32 | 33 | > For more details(demo videos), see [GOOGLE-DRIVE](https://drive.google.com/drive/folders/1zqsDDTTqnVK11VnejBjC5584iCRfDQby?usp=sharing). 34 | 35 | 36 | 37 | 38 | 39 | ## Compile Me! 40 | 41 | ### Supported OS 42 | 43 | - This project is developed under Windows 10. 44 | 45 | > *It seems that it cannot work with Intel's graphic card's power saving mode. 46 | 47 | ### 3rd Parties Dependencies 48 | 49 | - AMP 50 | - OpenCV - 3.20 51 | - Cocos2dx-3.17 52 | - GLM 53 | - GLFW3 54 | -------------------------------------------------------------------------------- /REPORT-CN.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ganler/bimulator/9021a3aa72b394bad552fedb4b68dfec135e08e4/REPORT-CN.pdf -------------------------------------------------------------------------------- /Resources/BackGround1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ganler/bimulator/9021a3aa72b394bad552fedb4b68dfec135e08e4/Resources/BackGround1.jpg -------------------------------------------------------------------------------- /Resources/BackGround2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ganler/bimulator/9021a3aa72b394bad552fedb4b68dfec135e08e4/Resources/BackGround2.jpg -------------------------------------------------------------------------------- /Resources/BackGroundHero.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ganler/bimulator/9021a3aa72b394bad552fedb4b68dfec135e08e4/Resources/BackGroundHero.jpg -------------------------------------------------------------------------------- /Resources/CloseNormal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ganler/bimulator/9021a3aa72b394bad552fedb4b68dfec135e08e4/Resources/CloseNormal.png -------------------------------------------------------------------------------- /Resources/CloseSelected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ganler/bimulator/9021a3aa72b394bad552fedb4b68dfec135e08e4/Resources/CloseSelected.png -------------------------------------------------------------------------------- /Resources/HelloWorld.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ganler/bimulator/9021a3aa72b394bad552fedb4b68dfec135e08e4/Resources/HelloWorld.png -------------------------------------------------------------------------------- /Resources/Hero1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ganler/bimulator/9021a3aa72b394bad552fedb4b68dfec135e08e4/Resources/Hero1.png -------------------------------------------------------------------------------- /Resources/Hero2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ganler/bimulator/9021a3aa72b394bad552fedb4b68dfec135e08e4/Resources/Hero2.png -------------------------------------------------------------------------------- /Resources/Hero3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ganler/bimulator/9021a3aa72b394bad552fedb4b68dfec135e08e4/Resources/Hero3.png -------------------------------------------------------------------------------- /Resources/Hp0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ganler/bimulator/9021a3aa72b394bad552fedb4b68dfec135e08e4/Resources/Hp0.png -------------------------------------------------------------------------------- /Resources/Hp1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ganler/bimulator/9021a3aa72b394bad552fedb4b68dfec135e08e4/Resources/Hp1.png -------------------------------------------------------------------------------- /Resources/LeftArrow.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ganler/bimulator/9021a3aa72b394bad552fedb4b68dfec135e08e4/Resources/LeftArrow.jpg -------------------------------------------------------------------------------- /Resources/MidArrow.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ganler/bimulator/9021a3aa72b394bad552fedb4b68dfec135e08e4/Resources/MidArrow.jpg -------------------------------------------------------------------------------- /Resources/MoreNormal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ganler/bimulator/9021a3aa72b394bad552fedb4b68dfec135e08e4/Resources/MoreNormal.png -------------------------------------------------------------------------------- /Resources/MoreSelected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ganler/bimulator/9021a3aa72b394bad552fedb4b68dfec135e08e4/Resources/MoreSelected.png -------------------------------------------------------------------------------- /Resources/Prop1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ganler/bimulator/9021a3aa72b394bad552fedb4b68dfec135e08e4/Resources/Prop1.png -------------------------------------------------------------------------------- /Resources/Prop2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ganler/bimulator/9021a3aa72b394bad552fedb4b68dfec135e08e4/Resources/Prop2.png -------------------------------------------------------------------------------- /Resources/RightArrow.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ganler/bimulator/9021a3aa72b394bad552fedb4b68dfec135e08e4/Resources/RightArrow.jpg -------------------------------------------------------------------------------- /Resources/Sprite1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ganler/bimulator/9021a3aa72b394bad552fedb4b68dfec135e08e4/Resources/Sprite1.png -------------------------------------------------------------------------------- /Resources/Sprite2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ganler/bimulator/9021a3aa72b394bad552fedb4b68dfec135e08e4/Resources/Sprite2.png -------------------------------------------------------------------------------- /Resources/Sprite3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ganler/bimulator/9021a3aa72b394bad552fedb4b68dfec135e08e4/Resources/Sprite3.png -------------------------------------------------------------------------------- /Resources/StartNormal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ganler/bimulator/9021a3aa72b394bad552fedb4b68dfec135e08e4/Resources/StartNormal.png -------------------------------------------------------------------------------- /Resources/StartSelected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ganler/bimulator/9021a3aa72b394bad552fedb4b68dfec135e08e4/Resources/StartSelected.png -------------------------------------------------------------------------------- /Resources/Weapon1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ganler/bimulator/9021a3aa72b394bad552fedb4b68dfec135e08e4/Resources/Weapon1.png -------------------------------------------------------------------------------- /Resources/Weapon2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ganler/bimulator/9021a3aa72b394bad552fedb4b68dfec135e08e4/Resources/Weapon2.png -------------------------------------------------------------------------------- /Resources/Weapon3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ganler/bimulator/9021a3aa72b394bad552fedb4b68dfec135e08e4/Resources/Weapon3.png -------------------------------------------------------------------------------- /Resources/fonts/Marker Felt.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ganler/bimulator/9021a3aa72b394bad552fedb4b68dfec135e08e4/Resources/fonts/Marker Felt.ttf -------------------------------------------------------------------------------- /Resources/fonts/arial.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ganler/bimulator/9021a3aa72b394bad552fedb4b68dfec135e08e4/Resources/fonts/arial.ttf -------------------------------------------------------------------------------- /Resources/res/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ganler/bimulator/9021a3aa72b394bad552fedb4b68dfec135e08e4/Resources/res/.gitkeep -------------------------------------------------------------------------------- /Resources/shaders/cube.fsh: -------------------------------------------------------------------------------- 1 | varying vec2 Tx; 2 | varying vec3 Norm; 3 | varying vec4 frag_pos; 4 | 5 | 6 | uniform vec3 light_pos; 7 | uniform vec3 view_pos; 8 | 9 | void main() 10 | { 11 | normalize(vec2(1.0,5.0)); 12 | if(frag_pos.x>799.9) 13 | gl_FragColor = texture2D(CC_Texture3,vec2(-frag_pos.y/1600.0-0.5,-frag_pos.z/1600.0-0.5)); 14 | else if(frag_pos.x<-799.9) 15 | gl_FragColor = texture2D(CC_Texture3,vec2(frag_pos.y/1600.0+0.5,-frag_pos.z/1600.0-0.5)); 16 | else if(frag_pos.y>799.9) 17 | gl_FragColor = texture2D(CC_Texture3,vec2(frag_pos.x/1600.0+0.5,-frag_pos.z/1600.0-0.5)); 18 | else if(frag_pos.y<-799.9) 19 | gl_FragColor = texture2D(CC_Texture3,vec2(-frag_pos.x/1600.0-0.5,-frag_pos.z/1600.0-0.5)); 20 | else if(frag_pos.z>799.9) 21 | gl_FragColor = texture2D(CC_Texture3,vec2(-frag_pos.x/1600.0-0.5,-frag_pos.y/1600.0-0.5)); 22 | else if(frag_pos.z<-799.9) 23 | gl_FragColor = texture2D(CC_Texture3,vec2(frag_pos.x/1600.0+0.5,frag_pos.y/1600.0+0.5)); 24 | 25 | else 26 | { 27 | vec3 light_color = vec3(1.0, 1.0, 0.8); 28 | float ambient_fac = 0.0; 29 | vec3 ambient = ambient_fac * light_color; 30 | 31 | // Diffuse 32 | vec3 nNorm = normalize(Norm); 33 | vec3 light_dir = normalize(light_pos - vec3(frag_pos)); 34 | float diff = 0.5* max(dot(nNorm, light_dir), 0.0); 35 | vec3 diffuse = diff * light_color; 36 | 37 | // Specular 38 | float specular_fac = 0.8; 39 | if(frag_pos.z < -2.99) 40 | specular_fac = 0.05; 41 | vec3 view_dir = normalize(view_pos - vec3(frag_pos)); 42 | vec3 reflect_dir = reflect(-light_dir, nNorm); 43 | float spec ; 44 | if(frag_pos.z<-2.9) 45 | spec=pow(max(dot(view_dir, reflect_dir), 0.0), 8.0); 46 | else 47 | spec=pow(max(dot(view_dir, reflect_dir), 0.0), 32.0); // 反射光别太强了 48 | vec3 specular = specular_fac * spec * light_color; 49 | vec3 result = (ambient + diffuse + specular)*texture2D(CC_Texture0,Tx).xyz; 50 | 51 | float shadowDepth = texture2D(CC_Texture2,vec2(gl_FragCoord.x/800.0,-gl_FragCoord.y/600.0)).x; 52 | gl_FragColor = shadowDepth*vec4(result,1.0)+texture2D(CC_Texture1,vec2(gl_FragCoord.x/800.0,-gl_FragCoord.y/600.0)); 53 | if(frag_pos.z<-2.99)//画球洞 54 | { 55 | if((frag_pos.x-125)*(frag_pos.x-125)+(frag_pos.y-65)*(frag_pos.y-65)<64.0)//画球洞 56 | gl_FragColor = vec4(0.0,0.0,0.0,0.0); 57 | else if((frag_pos.x-125)*(frag_pos.x-125)+(frag_pos.y+65)*(frag_pos.y+65)<64.0) 58 | gl_FragColor = vec4(0.0,0.0,0.0,0.0); 59 | else if((frag_pos.x+125)*(frag_pos.x+125)+(frag_pos.y-65)*(frag_pos.y-65)<64.0) 60 | gl_FragColor = vec4(0.0,0.0,0.0,0.0); 61 | else if((frag_pos.x+125)*(frag_pos.x+125)+(frag_pos.y+65)*(frag_pos.y+65)<64.0) 62 | gl_FragColor = vec4(0.0,0.0,0.0,0.0); 63 | else if(frag_pos.x*frag_pos.x+(frag_pos.y-65)*(frag_pos.y-65)<64.0) 64 | gl_FragColor = vec4(0.0,0.0,0.0,0.0); 65 | else if(frag_pos.x*frag_pos.x+(frag_pos.y+65)*(frag_pos.y+65)<64.0) 66 | gl_FragColor = vec4(0.0,0.0,0.0,0.0); 67 | } 68 | } 69 | 70 | 71 | if(gl_FragCoord.x>=375.0&&gl_FragCoord.x<=425.0&&gl_FragCoord.y<=301.0&&gl_FragCoord.y>=299.0) 72 | gl_FragColor=vec4(1.0,1.0,0.0,1.0); 73 | if(gl_FragCoord.x>=399.0&&gl_FragCoord.x<=401.0&&gl_FragCoord.y<=325.0&&gl_FragCoord.y>=275.0) 74 | gl_FragColor=vec4(1.0,1.0,0.0,1.0); 75 | //绘制准星 76 | 77 | } -------------------------------------------------------------------------------- /Resources/shaders/cube.vsh: -------------------------------------------------------------------------------- 1 | attribute vec3 aPos; 2 | attribute vec2 aTx; 3 | attribute vec3 aNorm; 4 | 5 | uniform mat4 model; 6 | uniform mat4 projection; 7 | uniform mat4 view; 8 | uniform mat4 rot; 9 | 10 | varying vec2 Tx; 11 | varying vec3 Norm; 12 | varying vec4 frag_pos; 13 | 14 | void main() 15 | { 16 | gl_Position = projection*view*model*vec4(aPos.x , aPos.y , aPos.z, 1.0); 17 | Tx=aTx; 18 | Norm=vec3(rot*vec4(aNorm,1.0)); 19 | frag_pos=model*vec4(aPos,1.0); 20 | } -------------------------------------------------------------------------------- /Resources/shaders/trac.fsh: -------------------------------------------------------------------------------- 1 | void main() 2 | { 3 | gl_FragColor = texture2D(CC_Texture0,vec2(gl_FragCoord.x/800.0,gl_FragCoord.y/600.0)); 4 | if(gl_FragCoord.x>=375&&gl_FragCoord.x<=425&&gl_FragCoord.y<=301&&gl_FragCoord.y>=299) 5 | gl_FragColor=vec4(1.0,1.0,0.0,1.0); 6 | if(gl_FragCoord.x>=399&&gl_FragCoord.x<=401&&gl_FragCoord.y<=325&&gl_FragCoord.y>=275) 7 | gl_FragColor=vec4(1.0,1.0,0.0,1.0); 8 | 9 | gl_FragColor=vec4(1.0,1.0,0.0,1.0); 10 | } -------------------------------------------------------------------------------- /Resources/shaders/trac.vsh: -------------------------------------------------------------------------------- 1 | attribute vec3 aPos; 2 | 3 | void main() 4 | { 5 | gl_Position = vec4(aPos,1.0); 6 | } -------------------------------------------------------------------------------- /Resources/textures/0.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ganler/bimulator/9021a3aa72b394bad552fedb4b68dfec135e08e4/Resources/textures/0.bmp -------------------------------------------------------------------------------- /Resources/textures/1.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ganler/bimulator/9021a3aa72b394bad552fedb4b68dfec135e08e4/Resources/textures/1.bmp -------------------------------------------------------------------------------- /Resources/textures/10.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ganler/bimulator/9021a3aa72b394bad552fedb4b68dfec135e08e4/Resources/textures/10.bmp -------------------------------------------------------------------------------- /Resources/textures/2.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ganler/bimulator/9021a3aa72b394bad552fedb4b68dfec135e08e4/Resources/textures/2.bmp -------------------------------------------------------------------------------- /Resources/textures/3.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ganler/bimulator/9021a3aa72b394bad552fedb4b68dfec135e08e4/Resources/textures/3.bmp -------------------------------------------------------------------------------- /Resources/textures/4.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ganler/bimulator/9021a3aa72b394bad552fedb4b68dfec135e08e4/Resources/textures/4.bmp -------------------------------------------------------------------------------- /Resources/textures/5.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ganler/bimulator/9021a3aa72b394bad552fedb4b68dfec135e08e4/Resources/textures/5.bmp -------------------------------------------------------------------------------- /Resources/textures/6.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ganler/bimulator/9021a3aa72b394bad552fedb4b68dfec135e08e4/Resources/textures/6.bmp -------------------------------------------------------------------------------- /Resources/textures/7.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ganler/bimulator/9021a3aa72b394bad552fedb4b68dfec135e08e4/Resources/textures/7.bmp -------------------------------------------------------------------------------- /Resources/textures/8.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ganler/bimulator/9021a3aa72b394bad552fedb4b68dfec135e08e4/Resources/textures/8.bmp -------------------------------------------------------------------------------- /Resources/textures/9.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ganler/bimulator/9021a3aa72b394bad552fedb4b68dfec135e08e4/Resources/textures/9.bmp -------------------------------------------------------------------------------- /Resources/textures/desk.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ganler/bimulator/9021a3aa72b394bad552fedb4b68dfec135e08e4/Resources/textures/desk.bmp -------------------------------------------------------------------------------- /Resources/textures/skybox/east.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ganler/bimulator/9021a3aa72b394bad552fedb4b68dfec135e08e4/Resources/textures/skybox/east.bmp -------------------------------------------------------------------------------- /Resources/textures/skybox/north.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ganler/bimulator/9021a3aa72b394bad552fedb4b68dfec135e08e4/Resources/textures/skybox/north.bmp -------------------------------------------------------------------------------- /Resources/textures/skybox/south.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ganler/bimulator/9021a3aa72b394bad552fedb4b68dfec135e08e4/Resources/textures/skybox/south.bmp -------------------------------------------------------------------------------- /Resources/textures/skybox/up.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ganler/bimulator/9021a3aa72b394bad552fedb4b68dfec135e08e4/Resources/textures/skybox/up.bmp -------------------------------------------------------------------------------- /Resources/textures/skybox/west.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ganler/bimulator/9021a3aa72b394bad552fedb4b68dfec135e08e4/Resources/textures/skybox/west.bmp -------------------------------------------------------------------------------- /Resources/textures/textures.rar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ganler/bimulator/9021a3aa72b394bad552fedb4b68dfec135e08e4/Resources/textures/textures.rar -------------------------------------------------------------------------------- /Resources/textures/wood.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ganler/bimulator/9021a3aa72b394bad552fedb4b68dfec135e08e4/Resources/textures/wood.jpg -------------------------------------------------------------------------------- /img/img1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ganler/bimulator/9021a3aa72b394bad552fedb4b68dfec135e08e4/img/img1.png -------------------------------------------------------------------------------- /img/img2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ganler/bimulator/9021a3aa72b394bad552fedb4b68dfec135e08e4/img/img2.png -------------------------------------------------------------------------------- /img/tech1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ganler/bimulator/9021a3aa72b394bad552fedb4b68dfec135e08e4/img/tech1.png --------------------------------------------------------------------------------