Shaders¶
GpuShaderCreator¶
- class PyOpenColorIO.GpuShaderCreator¶
Inherit from the class to fully customize the implementation of a GPU shader program from a color transformation.
When no customizations are needed then the
:ref:`GpuShaderDesc`is a better choice.To better decouple the DynamicProperties from their GPU implementation, the code provides several addUniform() methods i.e. one per access function types. For example, an ExposureContrastTransform instance owns three DynamicProperties and they are all implemented by a double. When creating the GPU fragment shader program, the addUniform() with GpuShaderCreator::DoubleGetter is called when property is dynamic, up to three times.
- addToDeclareShaderCode(shaderCode: str) None¶
- addToFunctionHeaderShaderCode(shaderCode: str) None¶
- addToFunctionShaderCode(shaderCode: str) None¶
- addToHelperShaderCode(shaderCode: str) None¶
- begin(uid: str) None¶
Start to collect the shader data.
- clone() PyOpenColorIO.GpuShaderCreator¶
- createShaderText(shaderDeclarations: str, shaderHelperMethods: str, shaderFunctionHeader: str, shaderFunctionBody: str, shaderFunctionFooter: str) None¶
Create the OCIO shader program.
The OCIO shader program is decomposed to allow a specific implementation to change some parts. Some product integrations add the color processing within a client shader program, imposing constraints requiring this flexibility.
- end() None¶
End to collect the shader data.
- finalize() None¶
- getCacheID() str¶
- getDynamicProperties() PyOpenColorIO.GpuShaderCreator.DynamicPropertyIterator¶
- getDynamicProperty(type: PyOpenColorIO.DynamicPropertyType) PyOpenColorIO.DynamicProperty¶
- getFunctionName() str¶
- getLanguage() PyOpenColorIO.GpuLanguage¶
- getNextResourceIndex() int¶
To avoid texture/unform name clashes always append an increasing number to the resource name.
- getPixelName() str¶
- getResourcePrefix() str¶
Note
Some applications require that textures, uniforms, and helper methods be uniquely named because several processor instances could coexist.
- getTextureMaxWidth() int¶
- getUniqueID() str¶
- hasDynamicProperty(type: PyOpenColorIO.DynamicPropertyType) bool¶
- setFunctionName(name: str) None¶
- setLanguage(language: PyOpenColorIO.GpuLanguage) None¶
Set the shader program language.
- setPixelName(name: str) None¶
Set the pixel name variable holding the color values.
- setResourcePrefix(prefix: str) None¶
Set a prefix to the resource name.
- setTextureMaxWidth(maxWidth: int) None¶
Some graphic cards could have 1D & 2D textures with size limitations.
- setUniqueID(uid: str) None¶
- class PyOpenColorIO.GpuShaderCreator.TextureType¶
Members:
TEXTURE_RED_CHANNEL
TEXTURE_RGB_CHANNEL
- property name str¶
- TEXTURE_RED_CHANNEL = <TextureType.TEXTURE_RED_CHANNEL: 0>¶
- TEXTURE_RGB_CHANNEL = <TextureType.TEXTURE_RGB_CHANNEL: 1>¶
- property value¶
- class PyOpenColorIO.GpuShaderCreator.DynamicPropertyIterator¶
- self[arg0: int] PyOpenColorIO.DynamicProperty¶
- len(self) int¶
- next(self) PyOpenColorIO.DynamicProperty¶
-
class OpenColorIO_v2_0::GpuShaderCreator¶
Inherit from the class to fully customize the implementation of a GPU shader program from a color transformation.
When no customizations are needed then the :cpp:class:
GpuShaderDescis a better choice.To better decouple the DynamicProperties from their GPU implementation, the code provides several addUniform() methods i.e. one per access function types. For example, an ExposureContrastTransform instance owns three DynamicProperties and they are all implemented by a double. When creating the GPU fragment shader program, the addUniform() with GpuShaderCreator::DoubleGetter is called when property is dynamic, up to three times.
Subclassed by GpuShaderDesc
Public Types
-
enum TextureType¶
Values:
-
enumerator TEXTURE_RED_CHANNEL¶
Only use the red channel of the texture.
-
enumerator TEXTURE_RGB_CHANNEL¶
-
enumerator TEXTURE_RED_CHANNEL¶
-
typedef std::function<double()> DoubleGetter¶
Function returning a double, used by uniforms. GPU converts double to float.
-
typedef std::function<bool()> BoolGetter¶
Function returning a bool, used by uniforms.
-
typedef std::function<const Float3&()> Float3Getter¶
Functions returning a Float3, used by uniforms.
-
typedef std::function<int()> SizeGetter¶
Function returning an int, used by uniforms.
-
typedef std::function<const float*()> VectorFloatGetter¶
Function returning a float *, used by uniforms.
-
typedef std::function<const int*()> VectorIntGetter¶
Function returning an int *, used by uniforms.
Public Functions
-
virtual GpuShaderCreatorRcPtr clone() const = 0¶
-
const char *getUniqueID() const noexcept¶
-
void setUniqueID(const char *uid) noexcept¶
-
GpuLanguage getLanguage() const noexcept¶
-
void setLanguage(GpuLanguage lang) noexcept¶
Set the shader program language.
-
const char *getFunctionName() const noexcept¶
-
void setFunctionName(const char *name) noexcept¶
-
const char *getPixelName() const noexcept¶
-
void setPixelName(const char *name) noexcept¶
Set the pixel name variable holding the color values.
-
const char *getResourcePrefix() const noexcept¶
Note
Some applications require that textures, uniforms, and helper methods be uniquely named because several processor instances could coexist.
-
void setResourcePrefix(const char *prefix) noexcept¶
Set a prefix to the resource name.
-
virtual const char *getCacheID() const noexcept¶
-
virtual void begin(const char *uid)¶
Start to collect the shader data.
-
virtual void end()¶
End to collect the shader data.
-
virtual void setTextureMaxWidth(unsigned maxWidth) = 0¶
Some graphic cards could have 1D & 2D textures with size limitations.
-
virtual unsigned getTextureMaxWidth() const noexcept = 0¶
-
unsigned getNextResourceIndex() noexcept¶
To avoid texture/unform name clashes always append an increasing number to the resource name.
-
virtual bool addUniform(const char *name, const DoubleGetter &getDouble) = 0¶
-
virtual bool addUniform(const char *name, const BoolGetter &getBool) = 0¶
-
virtual bool addUniform(const char *name, const Float3Getter &getFloat3) = 0¶
-
virtual bool addUniform(const char *name, const SizeGetter &getSize, const VectorFloatGetter &getVectorFloat) = 0¶
-
virtual bool addUniform(const char *name, const SizeGetter &getSize, const VectorIntGetter &getVectorInt) = 0¶
-
void addDynamicProperty(DynamicPropertyRcPtr &prop)¶
Adds the property (used internally).
-
unsigned getNumDynamicProperties() const noexcept¶
Dynamic Property related methods.
-
DynamicPropertyRcPtr getDynamicProperty(unsigned index) const¶
-
bool hasDynamicProperty(DynamicPropertyType type) const¶
-
DynamicPropertyRcPtr getDynamicProperty(DynamicPropertyType type) const¶
Dynamic properties allow changes once the fragment shader program has been created. The steps are to get the appropriate DynamicProperty instance, and then change its value.
-
virtual void addTexture(const char *textureName, const char *samplerName, unsigned width, unsigned height, TextureType channel, Interpolation interpolation, const float *values) = 0¶
-
virtual void add3DTexture(const char *textureName, const char *samplerName, unsigned edgelen, Interpolation interpolation, const float *values) = 0¶
-
virtual void addToDeclareShaderCode(const char *shaderCode)¶
-
virtual void addToHelperShaderCode(const char *shaderCode)¶
-
virtual void addToFunctionHeaderShaderCode(const char *shaderCode)¶
-
virtual void addToFunctionShaderCode(const char *shaderCode)¶
-
virtual void createShaderText(const char *shaderDeclarations, const char *shaderHelperMethods, const char *shaderFunctionHeader, const char *shaderFunctionBody, const char *shaderFunctionFooter)¶
Create the OCIO shader program.
The OCIO shader program is decomposed to allow a specific implementation to change some parts. Some product integrations add the color processing within a client shader program, imposing constraints requiring this flexibility.
Note
-
virtual void finalize()¶
-
GpuShaderCreator(const GpuShaderCreator&) = delete¶
-
GpuShaderCreator &operator=(const GpuShaderCreator&) = delete¶
-
virtual ~GpuShaderCreator()¶
Do not use (needed only for pybind11).
-
enum TextureType¶
-
typedef std::shared_ptr<const GpuShaderCreator> OpenColorIO_v2_0::ConstGpuShaderCreatorRcPtr¶
-
typedef std::shared_ptr<GpuShaderCreator> OpenColorIO_v2_0::GpuShaderCreatorRcPtr¶
GpuShaderDesc¶
- class PyOpenColorIO.GpuShaderDesc¶
- static CreateLegacyShaderDesc(edgeLen: int, language: PyOpenColorIO.GpuLanguage = <GpuLanguage.GPU_LANGUAGE_GLSL_1_2: 1>, functionName: str = 'OCIOMain', pixelName: str = 'outColor', resourcePrefix: str = 'ocio', uid: str = '') PyOpenColorIO.GpuShaderDesc¶
Create the legacy GPU shader description. This is now deprecated (to be removed in the coming release i.e. 2.1.x). Do not use it because that’s broken. So, this method has been replaced by the pair Processor::getOptimizedLegacyGPUProcessor() and GpuShaderDesc::CreateShaderDesc().
- static CreateShaderDesc(language: PyOpenColorIO.GpuLanguage = <GpuLanguage.GPU_LANGUAGE_GLSL_1_2: 1>, functionName: str = 'OCIOMain', pixelName: str = 'outColor', resourcePrefix: str = 'ocio', uid: str = '') PyOpenColorIO.GpuShaderDesc¶
Create the default shader description.
- GpuShaderDesc(*args, **kwargs)¶
- add3DTexture(textureName: str, samplerName: str, edgeLen: int, interpolation: PyOpenColorIO.Interpolation, values: buffer) None¶
- addTexture(textureName: str, samplerName: str, width: int, height: int, channel: PyOpenColorIO.GpuShaderCreator.TextureType, interpolation: PyOpenColorIO.Interpolation, values: buffer) None¶
- addToDeclareShaderCode(shaderCode: str) None¶
- addToFunctionHeaderShaderCode(shaderCode: str) None¶
- addToFunctionShaderCode(shaderCode: str) None¶
- addToHelperShaderCode(shaderCode: str) None¶
- begin(uid: str) None¶
Start to collect the shader data.
- clone() PyOpenColorIO.GpuShaderCreator¶
- createShaderText(shaderDeclarations: str, shaderHelperMethods: str, shaderFunctionHeader: str, shaderFunctionBody: str, shaderFunctionFooter: str) None¶
Create the OCIO shader program.
The OCIO shader program is decomposed to allow a specific implementation to change some parts. Some product integrations add the color processing within a client shader program, imposing constraints requiring this flexibility.
- end() None¶
End to collect the shader data.
- finalize() None¶
- get3DTextures() PyOpenColorIO.GpuShaderDesc.Texture3DIterator¶
- getCacheID() str¶
- getDynamicProperties() PyOpenColorIO.GpuShaderCreator.DynamicPropertyIterator¶
- getDynamicProperty(type: PyOpenColorIO.DynamicPropertyType) PyOpenColorIO.DynamicProperty¶
- getFunctionName() str¶
- getLanguage() PyOpenColorIO.GpuLanguage¶
- getNextResourceIndex() int¶
To avoid texture/unform name clashes always append an increasing number to the resource name.
- getPixelName() str¶
- getResourcePrefix() str¶
Note
Some applications require that textures, uniforms, and helper methods be uniquely named because several processor instances could coexist.
- getShaderText() str¶
Get the complete OCIO shader program.
- getTextureMaxWidth() int¶
- getTextures() PyOpenColorIO.GpuShaderDesc.TextureIterator¶
- getUniforms() PyOpenColorIO.GpuShaderDesc.UniformIterator¶
- getUniqueID() str¶
- hasDynamicProperty(type: PyOpenColorIO.DynamicPropertyType) bool¶
- setFunctionName(name: str) None¶
- setLanguage(language: PyOpenColorIO.GpuLanguage) None¶
Set the shader program language.
- setPixelName(name: str) None¶
Set the pixel name variable holding the color values.
- setResourcePrefix(prefix: str) None¶
Set a prefix to the resource name.
- setTextureMaxWidth(maxWidth: int) None¶
Some graphic cards could have 1D & 2D textures with size limitations.
- setUniqueID(uid: str) None¶
- class PyOpenColorIO.GpuShaderDesc.TextureType¶
Members:
TEXTURE_RED_CHANNEL
TEXTURE_RGB_CHANNEL
- property name str¶
- TEXTURE_RED_CHANNEL = <TextureType.TEXTURE_RED_CHANNEL: 0>¶
- TEXTURE_RGB_CHANNEL = <TextureType.TEXTURE_RGB_CHANNEL: 1>¶
- property value¶
- class PyOpenColorIO.GpuShaderDesc.UniformData¶
- getBool() bool¶
- getDouble() float¶
- getFloat3() List[float[3]]¶
- getVectorFloat() numpy.ndarray¶
- getVectorInt() numpy.ndarray¶
- property type¶
- class PyOpenColorIO.GpuShaderDesc.Texture¶
- property channel¶
- getValues() numpy.ndarray¶
- property height¶
- property interpolation¶
- property samplerName¶
- property textureName¶
- property width¶
- class PyOpenColorIO.GpuShaderDesc.Texture3D¶
- property edgeLen¶
- getValues() numpy.ndarray¶
- property interpolation¶
- property samplerName¶
- property textureName¶
- class PyOpenColorIO.GpuShaderDesc.UniformIterator¶
- self[arg0: int] tuple¶
- iter(self) PyOpenColorIO.GpuShaderDesc.UniformIterator¶
- len(self) int¶
- next(self) tuple¶
- class PyOpenColorIO.GpuShaderDesc.TextureIterator¶
- self[arg0: int] PyOpenColorIO.GpuShaderDesc.Texture¶
- iter(self) PyOpenColorIO.GpuShaderDesc.TextureIterator¶
- len(self) int¶
- next(self) PyOpenColorIO.GpuShaderDesc.Texture¶
- class PyOpenColorIO.GpuShaderDesc.Texture3DIterator¶
- self[arg0: int] PyOpenColorIO.GpuShaderDesc.Texture3D¶
- len(self) int¶
- next(self) PyOpenColorIO.GpuShaderDesc.Texture3D¶
- class PyOpenColorIO.GpuShaderDesc.DynamicPropertyIterator¶
- self[arg0: int] PyOpenColorIO.DynamicProperty¶
- len(self) int¶
- next(self) PyOpenColorIO.DynamicProperty¶
-
class OpenColorIO_v2_0::GpuShaderDesc : public GpuShaderCreator¶
Public Functions
-
virtual GpuShaderCreatorRcPtr clone() const override¶
-
virtual unsigned getNumUniforms() const noexcept = 0¶
-
virtual const char *getUniform(unsigned index, UniformData &data) const = 0¶
Returns name of uniform and data as parameter.
-
virtual unsigned getNumTextures() const noexcept = 0¶
-
virtual void getTexture(unsigned index, const char *&textureName, const char *&samplerName, unsigned &width, unsigned &height, TextureType &channel, Interpolation &interpolation) const = 0¶
-
virtual void getTextureValues(unsigned index, const float *&values) const = 0¶
-
virtual unsigned getNum3DTextures() const noexcept = 0¶
-
virtual void get3DTexture(unsigned index, const char *&textureName, const char *&samplerName, unsigned &edgelen, Interpolation &interpolation) const = 0¶
-
virtual void get3DTextureValues(unsigned index, const float *&values) const = 0¶
-
const char *getShaderText() const noexcept¶
Get the complete OCIO shader program.
-
GpuShaderDesc(const GpuShaderDesc&) = delete¶
-
GpuShaderDesc &operator=(const GpuShaderDesc&) = delete¶
-
virtual ~GpuShaderDesc()¶
Do not use (needed only for pybind11).
Public Static Functions
-
static GpuShaderDescRcPtr CreateLegacyShaderDesc(unsigned edgelen)¶
Create the legacy GPU shader description. This is now deprecated (to be removed in the coming release i.e. 2.1.x). Do not use it because that’s broken. So, this method has been replaced by the pair Processor::getOptimizedLegacyGPUProcessor() and GpuShaderDesc::CreateShaderDesc().
-
static GpuShaderDescRcPtr CreateShaderDesc()¶
Create the default shader description.
-
struct UniformData¶
Used to retrieve uniform information. UniformData m_type indicates the type of uniform and what member of the structure should be used:
UNIFORM_DOUBLE: m_getDouble.
UNIFORM_BOOL: m_getBool.
UNIFORM_FLOAT3: m_getFloat3.
UNIFORM_VECTOR_FLOAT: m_vectorFloat.
UNIFORM_VECTOR_INT: m_vectorInt.
Public Members
-
UniformDataType m_type = {UNIFORM_UNKNOWN}¶
-
DoubleGetter m_getDouble = {}¶
-
BoolGetter m_getBool = {}¶
-
Float3Getter m_getFloat3 = {}¶
-
struct OpenColorIO_v2_0::GpuShaderDesc::UniformData::VectorFloat m_vectorFloat¶
-
struct OpenColorIO_v2_0::GpuShaderDesc::UniformData::VectorInt m_vectorInt¶
-
struct VectorFloat¶
-
struct VectorInt¶
-
virtual GpuShaderCreatorRcPtr clone() const override¶
-
typedef std::shared_ptr<const GpuShaderDesc> OpenColorIO_v2_0::ConstGpuShaderDescRcPtr¶
-
typedef std::shared_ptr<GpuShaderDesc> OpenColorIO_v2_0::GpuShaderDescRcPtr¶