-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathVRInstanceForwardPipeline.cpp
72 lines (57 loc) · 2.29 KB
/
VRInstanceForwardPipeline.cpp
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
#include "VRInstanceForwardPipeline.h"
#include "RenderTarget.h"
#include "SceneManager.h"
#include "engine_struct.h"
#include "ResourceManager.h"
#include "pass.h"
#include "RenderSystem.h"
#include "TextureManager.h"
#include "GlobalVariablePool.h"
#include "Camera.h"
void VRInstanceForwardEffect::Init()
{
auto& rt_mgr = RenderTargetManager::getInstance();
mainwindow = rt_mgr.get("MainWindow");
rt_render = rt_mgr.CreateRenderTargetFromPreset("basic", "effect_forward");
rt_render->createInternalRes();
auto& tm = TextureManager::getInstance();
out_color = tm.get("effect_forward_tex1");
out_depth = tm.get("effect_forward_tex2");
forward_pass = PassManager::getInstance().LoadPass("vr_instance_forward_prog.json");
}
void VRInstanceForwardEffect::Render()
{
SceneManager* scene = SceneContainer::getInstance().get(input_scenename);
Camera *camera = scene->getCamera(input_cameraname);
RenderSystem* mRenderSystem = GlobalResourceManager::getInstance().m_RenderSystem;
RenderQueue queue;
scene->getVisibleRenderQueue_as(camera, queue);
forward_pass->mProgram->setProgramConstantData("LightColor", &LightColor[0], "vec3", sizeof(Vector3));
forward_pass->mProgram->setProgramConstantData("LightPosition", &LightPosition[0], "vec3", sizeof(Vector3));
//forward_pass->mProgram->setProgramConstantData("ProjectionLeft", &projLeft, "mat4", sizeof(Matrix4));
//forward_pass->mProgram->setProgramConstantData("ProjectionRight", &projRight, "mat4", sizeof(Matrix4));
//forward_pass->mProgram->setProgramConstantData("ViewMatrixLeft", &viewLeft, "mat4", sizeof(Matrix4));
//forward_pass->mProgram->setProgramConstantData("ViewMatrixRight", &viewRight, "mat4", sizeof(Matrix4));
GlobalVariablePool* gp = GlobalVariablePool::GetSingletonPtr();
gp->SetProjectMatrix(projLeft);
gp->SetViewMatrix(viewLeft);
mRenderSystem->RenderPass(NULL, queue, forward_pass, rt_render);
}
void VRInstanceForwardPipeline::Init()
{
eForward.input_scenename = "scene1";
eForward.input_cameraname = "main";
eForward.Init();
//!!! use left eye result as display
eShowtex.input_texture = eForward.out_color;
eShowtex.Init();
}
void VRInstanceForwardPipeline::Render()
{
eForward.Render();
eShowtex.Render();
}
void VRInstanceForwardPipeline::GetStereoTex(GLuint & tex)
{
tex = ((EGLTexture*)(eForward.out_color))->texture_id;
}