------------------------------------------------------------------------------
| 3034 | |
| 3035 | //------------------------------------------------------------------------------ |
| 3036 | int vtkOpenGLRenderWindow::GetNoiseTextureUnit() |
| 3037 | { |
| 3038 | if (!this->NoiseTextureObject) |
| 3039 | { |
| 3040 | this->NoiseTextureObject = vtkTextureObject::New(); |
| 3041 | this->NoiseTextureObject->SetContext(this); |
| 3042 | } |
| 3043 | |
| 3044 | if (this->NoiseTextureObject->GetHandle() == 0) |
| 3045 | { |
| 3046 | vtkNew<vtkJPEGReader> imgReader; |
| 3047 | |
| 3048 | vtkNew<vtkMemoryResourceStream> stream; |
| 3049 | stream->SetBuffer(BlueNoiseTexture64x64, sizeof(BlueNoiseTexture64x64)); |
| 3050 | imgReader->SetStream(stream); |
| 3051 | imgReader->Update(); |
| 3052 | vtkImageData* textureReader = imgReader->GetOutput(); |
| 3053 | |
| 3054 | constexpr int bufferSize = 64 * 64; |
| 3055 | float* noiseTextureData = new float[bufferSize]; |
| 3056 | for (int i = 0; i < bufferSize; i++) |
| 3057 | { |
| 3058 | int const x = i % 64; |
| 3059 | int const y = i / 64; |
| 3060 | noiseTextureData[i] = textureReader->GetScalarComponentAsFloat(x, y, 0, 0) / 255.0f; |
| 3061 | } |
| 3062 | |
| 3063 | // Prepare texture |
| 3064 | this->NoiseTextureObject->Create2DFromRaw(64, 64, 1, VTK_FLOAT, noiseTextureData); |
| 3065 | |
| 3066 | this->NoiseTextureObject->SetWrapS(vtkTextureObject::Repeat); |
| 3067 | this->NoiseTextureObject->SetWrapT(vtkTextureObject::Repeat); |
| 3068 | this->NoiseTextureObject->SetMagnificationFilter(vtkTextureObject::Nearest); |
| 3069 | this->NoiseTextureObject->SetMinificationFilter(vtkTextureObject::Nearest); |
| 3070 | delete[] noiseTextureData; |
| 3071 | } |
| 3072 | |
| 3073 | int result = this->GetTextureUnitForTexture(this->NoiseTextureObject); |
| 3074 | |
| 3075 | if (result >= 0) |
| 3076 | { |
| 3077 | return result; |
| 3078 | } |
| 3079 | |
| 3080 | this->NoiseTextureObject->Activate(); |
| 3081 | return this->GetTextureUnitForTexture(this->NoiseTextureObject); |
| 3082 | } |
| 3083 | |
| 3084 | //------------------------------------------------------------------------------ |
| 3085 | void vtkOpenGLRenderWindow::Render() |
no test coverage detected