VR-Forces 5.0.3 Developer's Guide
 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  bool 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 && myIsInitalised; }
125 
127  void reset() { myIsInitalised = false; }
128 
130  static void populateDataForvated(int width, int height, float centerX, float centerY, VariableRatePixelBuffer &data);
131 
133  // focusval and context val are indicies into the variable rate shading image palette
134  static void populateDataFocusRect(int width, int height, float focusMinX, float focusMinY, float focusMaxX, float focusMaxY, unsigned char focusVal, unsigned char contextVal, VariableRatePixelBuffer& data);
135 
136  protected:
138  virtual ~DtVariableRateShadingImage();
139 
141  void loadImageData(osg::State& state);
142 
143  protected:
146 
149 
151 
154 
155  std::vector<VariableRatePixelBuffer> myShadingRateImageData;
158  };
159 
162  class DT_DLL_VRVOSG DtVariableRateShadingImageStateAttribute : public osg::StateAttribute
163  {
164  public:
165 
167  static const osg::StateAttribute::Type VariableRateShadingImageStateAttributeType = (osg::StateAttribute::Type)3000;
168 
171 
174 
176  DtVariableRateShadingImageStateAttribute(const DtVariableRateShadingImageStateAttribute& stateAttrib, const osg::CopyOp& copyop = osg::CopyOp::SHALLOW_COPY);
177 
178  META_StateAttribute(osg, DtVariableRateShadingImageStateAttribute, VariableRateShadingImageStateAttributeType);
179 
181  virtual bool isTextureAttribute() const;
182 
184  virtual int compare(const osg::StateAttribute& sa) const;
185 
187  virtual void apply(osg::State&) const;
188 
190  virtual void compileGLObjects(osg::State&) const;
191 
193  virtual void releaseGLObjects(osg::State* = 0) const;
194 
196  DtVariableRateShadingImage* shadingImage() const;
197 
198  private:
199 
201  };
202 }
GLint myShadingRateImageTexelHeight
Definition: DtVariableRateShadingImage.h:153
std::vector< VariableRatePixelBuffer > myShadingRateImageData
Definition: DtVariableRateShadingImage.h:155
An osg stateattribute that applies a DtVariableRateShadingImage to the State.
Definition: DtVariableRateShadingImage.h:162
bool myIsInitalised
Definition: DtVariableRateShadingImage.h:148
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:47
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:147
This class provides the OSG-specific implementation of a DtChannel.
Definition: DtOsgChannel.h:52
DtOsgChannel * myChannel
Definition: DtVariableRateShadingImage.h:145
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:152
bool myShadingRateTextureIsDirty
Definition: DtVariableRateShadingImage.h:157
bool myUseImageData
Definition: DtVariableRateShadingImage.h:156
DtGlRenderTexture * myShadingRateTexture
Definition: DtVariableRateShadingImage.h:150
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:200
The DtDe is the core component of any VR-Vantage application. It owns a DtRenderer, DtDeCommunicator, as well as a DtDisplay and other things.
Definition: DtDe.h:70
DtDe & myDe
Definition: DtVariableRateShadingImage.h:144
GLuint const GLint * locations
Definition: DtVariableRateShadingImage.h:66
void reset()
reset the initalised state so the image is rebuilt
Definition: DtVariableRateShadingImage.h:127

Document ID: Generated on Thu Jun 1 17:58:13 EDT 2023 from SVN revision 255404
Copyright © 2005-2021 MAK Technologies. All Rights Reserved (www.mak.com)