aboutsummaryrefslogtreecommitdiff
path: root/KaplaDemo/samples/sampleViewer3/SampleViewerScene.h
blob: b6653f1ee9e497d92d96dc3f68c23862201b905a (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
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
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
#ifndef SAMPLE_VIEWER_SCENE_H
#define SAMPLE_VIEWER_SCENE_H

#include "foundation/PxVec3.h"
#include "foundation/PxTransform.h"
#include "PxPhysics.h"
#include "PxCooking.h"

using namespace physx;

#include <vector>
#include <string>

class OptixRenderer;

#ifdef USE_OPTIX
#include "OptixRenderer.h"
#endif

class Shader;
class ShaderShadow;

// ---------------------------------------------------------------------
class SampleViewerScene
{
public:
	SampleViewerScene(PxPhysics* pxPhysics, PxCooking *pxCooking, bool isGrb,
		Shader *defaultShader, const char *resourcePath, float slowMotionFactor);
	virtual ~SampleViewerScene();

	// virtual interface

	virtual void preSim(float dt) {};
	virtual void postSim(float dt) {};
	virtual void duringSim(float dt) {};
	virtual void syncAsynchronousWork() {};

	virtual void handleMouseButton(int button, int state, int x, int y) {};
	virtual void handleMouseMotion(int x, int y) {};

	virtual void handleKeyDown(unsigned char key, int x, int y) {};
	virtual void handleKeyUp(unsigned char key, int x, int y) {};
	virtual void handleSpecialKey(unsigned char key, int x, int y) {};

	virtual void handleGamepadButton(int button, bool state) {};
	virtual void handleGamepadAxis(int axis, float x) {};
	virtual void handleGamepadTrigger(int trigger, float x) {};

	virtual void render(bool useShader);
	virtual void printPerfInfo() {}

	virtual void setSlowMotionFactor(float factor) { mSlowMotionFactor = factor; }
	virtual std::string getWeaponName() { return ""; };
	virtual void customizeSceneDesc(PxSceneDesc& desc) {}

	virtual void onInit(PxScene* pxScene){ mPxScene = pxScene; }

	virtual void setScene(PxScene* pxScene) { mPxScene = pxScene; }

	// common code

	void setCamera(const PxVec3 &pos, const PxVec3 &dir, const PxVec3 &up, float fov ) {
		mCameraPos = pos; mCameraDir = dir; mCameraUp = up; mCameraFov = fov;
	}

	virtual void getCamera(PxVec3& pos, PxVec3& dir){}
	virtual bool isCameraDisable() { return mCameraDisable; }

	virtual void getInitialCamera(PxVec3& pos, PxVec3& dir) { pos = PxVec3(0.f, 25.f, 30.f); dir = PxVec3(0.f, -0.3f, -1.f).getNormalized(); }

	void getMouseRay(int xi, int yi, PxVec3 &orig, PxVec3 &dir);
	std::vector<ShaderShadow*>& getShaders() { return mShaders; }

	enum RenderType {
		rtOPENGL,
		rtOPTIX,
		rtNUM,
	};
	static void setRenderType(RenderType renderType) { mRenderType = renderType; }
	static void toggleRenderType() { setRenderType((RenderType)(((int)mRenderType+1)%rtNUM)); }
	static RenderType getRenderType() { return mRenderType; }
	static OptixRenderer* getOptixRenderer() { return mOptixRenderer; }
	
	// Set option string for renderers.
	static void setRendererOptions( const char* );
	static const char* getRendererOptions() {return mRendererOptions.c_str();}

	// Call this before exit().
	static void cleanupStaticResources();
	static void setBenchmark( bool on ) { mBenchmark = on; }
	static bool isBenchmark() { return mBenchmark; }

	virtual bool isSceneKapla() {return false;}


	PxPhysics& getPhysics() { return *mPxPhysics; }
	PxCooking& getCooking() { return *mPxCooking; }
	PxScene& getScene() { return *mPxScene; }


protected:
	void setMaterial(float restitution = 0.2f, float staticFriction = 0.2f, float dynamicFriction = 0.2f);

	PxPhysics *mPxPhysics;
	PxCooking *mPxCooking;
	PxScene *mPxScene;

	PxMaterial *mDefaultMaterial;

	PxVec3 mCameraPos, mCameraDir, mCameraUp;
	float  mCameraFov;
	std::vector<ShaderShadow*> mShaders;
	Shader *mDefaultShader;
	const char *mResourcePath;
	float mSlowMotionFactor;

	static RenderType mRenderType;
	static OptixRenderer *mOptixRenderer;
	static bool mBenchmark;
	static std::string	mRendererOptions;

	bool mCameraDisable;
};

#endif  // SAMPLE_VIEWER_SCENE_H