SGCT master (487fac4)
Simple Graphics Cluster Toolkit
Loading...
Searching...
No Matches
nonlinearprojection.h
Go to the documentation of this file.
1/*****************************************************************************************
2 * SGCT *
3 * Simple Graphics Cluster Toolkit *
4 * *
5 * Copyright (c) 2012-2026 *
6 * For conditions of distribution and use, see copyright notice in LICENSE.md *
7 ****************************************************************************************/
8
9#ifndef __SGCT__NONLINEARPROJECTION__H__
10#define __SGCT__NONLINEARPROJECTION__H__
11
12#include <sgct/sgctexports.h>
13
14#include <sgct/baseviewport.h>
15#include <sgct/definitions.h>
16#include <cstdint>
17#include <memory>
18
19namespace sgct {
20
21class OffScreenBuffer;
22class Window;
23
27class SGCT_EXPORT NonLinearProjection {
28public:
29 enum class InterpolationMode : uint8_t { Linear, Cubic };
30
31 explicit NonLinearProjection(const Window& parent);
32
34
39 virtual void initialize(unsigned int internalFormat, int nSamples);
40
41 virtual void render(const BaseViewport& viewport, FrustumMode frustumMode) const = 0;
42 virtual void renderCubemap(FrustumMode frustumMode) const = 0;
43 virtual void update(const vec2& size) const = 0;
44
45 virtual void updateFrustums(FrustumMode mode, float nearClip, float farClip);
46
52 void setCubemapResolution(int resolution);
53
60
64 void setUseDepthTransformation(bool state);
65
69 void setStereo(bool state);
70
71 virtual void setUser(User& user);
72
77
78protected:
79 virtual void initTextures(unsigned int internalFormat);
80 virtual void initFBO(unsigned int internalFormat, int nSamples);
81 virtual void initVBO() = 0;
82 virtual void initViewports() = 0;
83 virtual void initShaders() = 0;
84
85 void setupViewport(const BaseViewport& vp) const;
86 void generateMap(unsigned int& texture, unsigned int internalFormat);
87 void generateCubeMap(unsigned int& texture, unsigned int internalFormat);
88
89 void attachTextures(int face) const;
90 void blitCubeFace(int face) const;
91 void renderCubeFace(const BaseViewport& vp, int idx, FrustumMode mode) const;
92
93 struct {
94 unsigned int cubeMapColor = 0;
95 unsigned int cubeMapDepth = 0;
96 unsigned int cubeMapNormals = 0;
97 unsigned int cubeMapPositions = 0;
98 unsigned int colorSwap = 0;
99 unsigned int depthSwap = 0;
100 unsigned int cubeFaceRight = 0;
101 unsigned int cubeFaceLeft = 0;
102 unsigned int cubeFaceBottom = 0;
103 unsigned int cubeFaceTop = 0;
104 unsigned int cubeFaceFront = 0;
105 unsigned int cubeFaceBack = 0;
106 } _textures;
107
108 struct {
109 BaseViewport right;
110 BaseViewport left;
111 BaseViewport bottom;
112 BaseViewport top;
113 BaseViewport front;
114 BaseViewport back;
115 } _subViewports;
116
119
121 bool _isStereo = false;
122
124 vec4 _clearColor = vec4(0.3f, 0.3f, 0.3f, 1.f);
125
126 std::unique_ptr<OffScreenBuffer> _cubeMapFbo;
127};
128
129} // namespace sgct
130
131#endif // __SGCT__NONLINEARPROJECTION__H__
This class holds and manages viewportdata and calculates frustums.
Definition baseviewport.h:27
ivec2 cubemapResolution() const
virtual void initVBO()=0
virtual void initTextures(unsigned int internalFormat)
bool _useDepthTransformation
Definition nonlinearprojection.h:120
std::unique_ptr< OffScreenBuffer > _cubeMapFbo
Definition nonlinearprojection.h:126
InterpolationMode _interpolationMode
Definition nonlinearprojection.h:117
virtual void render(const BaseViewport &viewport, FrustumMode frustumMode) const =0
virtual void initialize(unsigned int internalFormat, int nSamples)
Initialize the non-linear projection.
FrustumMode _preferedMonoFrustumMode
Definition nonlinearprojection.h:118
virtual void setUser(User &user)
virtual void update(const vec2 &size) const =0
void generateCubeMap(unsigned int &texture, unsigned int internalFormat)
virtual void initViewports()=0
void attachTextures(int face) const
ivec2 _cubemapResolution
Definition nonlinearprojection.h:123
virtual void initFBO(unsigned int internalFormat, int nSamples)
void setInterpolationMode(InterpolationMode im)
Set the interpolation mode.
void renderCubeFace(const BaseViewport &vp, int idx, FrustumMode mode) const
InterpolationMode
Definition nonlinearprojection.h:29
@ Linear
Definition nonlinearprojection.h:29
void setUseDepthTransformation(bool state)
Set if depth should be re-calculated to match the non-linear projection.
void generateMap(unsigned int &texture, unsigned int internalFormat)
void setStereo(bool state)
Set if stereoscopic rendering will be enabled.
void setupViewport(const BaseViewport &vp) const
vec4 _clearColor
Definition nonlinearprojection.h:124
NonLinearProjection(const Window &parent)
virtual void initShaders()=0
void setCubemapResolution(int resolution)
Set the resolution of the cubemap faces.
void blitCubeFace(int face) const
virtual void updateFrustums(FrustumMode mode, float nearClip, float farClip)
bool _isStereo
Definition nonlinearprojection.h:121
virtual void renderCubemap(FrustumMode frustumMode) const =0
Helper class for creating frame buffer objects and render buffer objects.
Definition offscreenbuffer.h:21
Helper class for setting user variables.
Definition user.h:24
Definition window.h:46
Definition actions.h:16
FrustumMode
Definition definitions.h:23
@ Mono
Definition definitions.h:24
Definition math.h:17
Definition math.h:47
Definition math.h:66