VR-Forces 4.8 Class Documentation
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
DtVariableRateShadingImage.h
Go to the documentation of this file.
1 /******************************************************************************
2 ** Copyright (c) 2020 MAK Technologies, Inc.
3 ** All rights reserved.
4 ******************************************************************************/
5 
9 
10 #pragma once
11 
12 #include <vrvOsg/DtOsgChannel.h>
14 
15 #include <string>
16 
17 #ifndef GL_NV_shading_rate_image
18 #define GL_NV_shading_rate_image 1
19 #define GL_SHADING_RATE_IMAGE_NV 0x9563
20 #define GL_SHADING_RATE_NO_INVOCATIONS_NV 0x9564
21 #define GL_SHADING_RATE_1_INVOCATION_PER_PIXEL_NV 0x9565
22 #define GL_SHADING_RATE_1_INVOCATION_PER_1X2_PIXELS_NV 0x9566
23 #define GL_SHADING_RATE_1_INVOCATION_PER_2X1_PIXELS_NV 0x9567
24 #define GL_SHADING_RATE_1_INVOCATION_PER_2X2_PIXELS_NV 0x9568
25 #define GL_SHADING_RATE_1_INVOCATION_PER_2X4_PIXELS_NV 0x9569
26 #define GL_SHADING_RATE_1_INVOCATION_PER_4X2_PIXELS_NV 0x956A
27 #define GL_SHADING_RATE_1_INVOCATION_PER_4X4_PIXELS_NV 0x956B
28 #define GL_SHADING_RATE_2_INVOCATIONS_PER_PIXEL_NV 0x956C
29 #define GL_SHADING_RATE_4_INVOCATIONS_PER_PIXEL_NV 0x956D
30 #define GL_SHADING_RATE_8_INVOCATIONS_PER_PIXEL_NV 0x956E
31 #define GL_SHADING_RATE_16_INVOCATIONS_PER_PIXEL_NV 0x956F
32 #define GL_SHADING_RATE_IMAGE_BINDING_NV 0x955B
33 #define GL_SHADING_RATE_IMAGE_TEXEL_WIDTH_NV 0x955C
34 #define GL_SHADING_RATE_IMAGE_TEXEL_HEIGHT_NV 0x955D
35 #define GL_SHADING_RATE_IMAGE_PALETTE_SIZE_NV 0x955E
36 #define GL_MAX_COARSE_FRAGMENT_SAMPLES_NV 0x955F
37 #define GL_SHADING_RATE_SAMPLE_ORDER_DEFAULT_NV 0x95AE
38 #define GL_SHADING_RATE_SAMPLE_ORDER_PIXEL_MAJOR_NV 0x95AF
39 #define GL_SHADING_RATE_SAMPLE_ORDER_SAMPLE_MAJOR_NV 0x95B0
40 #endif /* GL_NV_shading_rate_image */
41 
42 
43 namespace makVrv
44 {
46  class DtVariableRateShadingImage;
47 
48 
53  class DT_DLL_VRVOSG VariableRateShadingExtensions : public osg::Referenced
54  {
55  public:
56  static VariableRateShadingExtensions* Get(unsigned int contextID, bool createIfNotInitalized);
57 
58  VariableRateShadingExtensions(unsigned int in_contextID);
59 
60  void (GL_APIENTRY * glBindShadingRateImageNV) (GLuint texture);
61  void (GL_APIENTRY * glGetShadingRateImagePaletteNV) (GLuint viewport, GLuint entry, GLenum *rate);
62  void (GL_APIENTRY * glGetShadingRateSampleLocationivNV) (GLenum rate, GLuint samples, GLuint index, GLint *location);
63  void (GL_APIENTRY * glShadingRateImageBarrierNV) (GLboolean synchronize);
64  void (GL_APIENTRY * glShadingRateImagePaletteNV) (GLuint viewport, GLuint first, GLsizei count, const GLenum *rates);
65  void (GL_APIENTRY * glShadingRateSampleOrderNV) (GLenum order);
66  void (GL_APIENTRY * glShadingRateSampleOrderCustomNV) (GLenum rate, GLuint samples, const GLint *locations);
67  };
68 
75  class DT_DLL_VRVOSG DtVariableRateShadingImage : public osg::Referenced
76  {
77  private:
80 
83 
84  public:
85  typedef std::vector<unsigned char> VariableRatePixelBuffer;
86 
89 
91  void initGLObjects(osg::State& state);
92 
94  void createShadingRateImageTextureForChannel(osg::State& state);
95 
97  unsigned int imageWidth() const;
98 
100  unsigned int imageHeight() const;
101 
103  unsigned int shadingRateTexelWidth() const;
104 
106  unsigned int shadingRateTexelHeight() const;
107 
109  void useImageData(bool useData);
110 
112  void dirtyImageData();
113 
115  std::vector<VariableRatePixelBuffer>& imageData();
116 
118  DtGlRenderTexture* texture();
119 
121  void bindShadingImage(osg::State& state);
122 
124  bool isInitalised() { return myExt != NULL; }
125 
127  static void populateDataForvated(int width, int height, float centerX, float centerY, VariableRatePixelBuffer &data);
128 
130  // focusval and context val are indicies into the variable rate shading image palette
131  static void populateDataFocusRect(int width, int height, float focusMinX, float focusMinY, float focusMaxX, float focusMaxY, unsigned char focusVal, unsigned char contextVal, VariableRatePixelBuffer& data);
132 
133  protected:
135  virtual ~DtVariableRateShadingImage();
136 
138  void loadImageData(osg::State& state);
139 
140  protected:
143 
145 
147 
150 
151  std::vector<VariableRatePixelBuffer> myShadingRateImageData;
154  };
155 
158  class DT_DLL_VRVOSG DtVariableRateShadingImageStateAttribute : public osg::StateAttribute
159  {
160  public:
161 
163  static const osg::StateAttribute::Type VariableRateShadingImageStateAttributeType = (osg::StateAttribute::Type)3000;
164 
167 
170 
172  DtVariableRateShadingImageStateAttribute(const DtVariableRateShadingImageStateAttribute& stateAttrib, const osg::CopyOp& copyop = osg::CopyOp::SHALLOW_COPY);
173 
174  META_StateAttribute(osg, DtVariableRateShadingImageStateAttribute, VariableRateShadingImageStateAttributeType);
175 
177  virtual bool isTextureAttribute() const;
178 
180  virtual int compare(const osg::StateAttribute& sa) const;
181 
183  virtual void apply(osg::State&) const;
184 
186  virtual void compileGLObjects(osg::State&) const;
187 
189  virtual void releaseGLObjects(osg::State* = 0) const;
190 
192  DtVariableRateShadingImage* shadingImage() const;
193 
194  private:
195 
197  };
198 }
GLint myShadingRateImageTexelHeight
Definition: DtVariableRateShadingImage.h:149
std::vector< VariableRatePixelBuffer > myShadingRateImageData
Definition: DtVariableRateShadingImage.h:151
An osg stateattribute that applies a DtVariableRateShadingImage to the State.
Definition: DtVariableRateShadingImage.h:158
Wrapper around Nvidia Variable Rate Shading Image functionality Creates a texture of the correct size...
Definition: DtVariableRateShadingImage.h:75
A helper classes for creating a RTT target, optionally including depth buffer.
Definition: DtGlRenderToTexture.h:31
Contains makVrv::DtOsgChannel class.
#define DT_DLL_VRVOSG
Definition: vrvOsg.h:23
Definition: featureContext.h:37
GLuint samples
Definition: DtVariableRateShadingImage.h:62
unsigned int GLuint
Definition: DtGlTextureBufferObject.h:17
GLuint GLenum * rate
Definition: DtVariableRateShadingImage.h:61
VariableRateShadingExtensions * myExt
Definition: DtVariableRateShadingImage.h:144
This class provides the OSG-specific implementation of a DtChannel.
Definition: DtOsgChannel.h:75
DtOsgChannel * myChannel
Definition: DtVariableRateShadingImage.h:142
GLuint GLsizei const GLenum * rates
Definition: DtVariableRateShadingImage.h:64
A helper classes for creating a RTT target, optionally including depth buffer.
bool isInitalised()
has initGLObject been called and succeeded
Definition: DtVariableRateShadingImage.h:124
GLint myShadingRateImageTexelWidth
Definition: DtVariableRateShadingImage.h:148
bool myShadingRateTextureIsDirty
Definition: DtVariableRateShadingImage.h:153
bool myUseImageData
Definition: DtVariableRateShadingImage.h:152
DtGlRenderTexture * myShadingRateTexture
Definition: DtVariableRateShadingImage.h:146
unsigned int GLenum
Definition: DtGlTextureBufferObject.h:18
std::vector< unsigned char > VariableRatePixelBuffer
Definition: DtVariableRateShadingImage.h:85
Extension functions used for Nvidia variable rate shading Initalises function pointers for the nvidia...
Definition: DtVariableRateShadingImage.h:53
osg::ref_ptr< DtVariableRateShadingImage > myShadingRateImage
Definition: DtVariableRateShadingImage.h:196
The DtDe is the core component of any VR-Vantage application.
Definition: DtDe.h:69
DtDe & myDe
Definition: DtVariableRateShadingImage.h:141
GLuint const GLint * locations
Definition: DtVariableRateShadingImage.h:66

Document ID: Generated on Thu Aug 27 10:56:05 EDT 2020 from SVN revision 217100
Copyright © 2005-2020 MAK Technologies. All Rights Reserved (www.mak.com)