Merge branch 'blender-v4.4-release'
[blender.git] / intern / opensubdiv / internal / evaluator / eval_output_gpu.h
blobf590016f171634000b00d4ab4b99908549a2465b
1 /* SPDX-FileCopyrightText: 2021 Blender Foundation
3 * SPDX-License-Identifier: GPL-2.0-or-later
5 * Author: Sergey Sharybin. */
7 #ifndef OPENSUBDIV_EVAL_OUTPUT_GPU_H_
8 #define OPENSUBDIV_EVAL_OUTPUT_GPU_H_
10 #include "internal/evaluator/eval_output.h"
11 #include "internal/evaluator/gl_compute_evaluator.h"
13 #include <opensubdiv/osd/glPatchTable.h>
14 #include <opensubdiv/osd/glVertexBuffer.h>
16 using OpenSubdiv::Osd::GLVertexBuffer;
18 namespace blender::opensubdiv {
20 class GpuEvalOutput : public VolatileEvalOutput<GLVertexBuffer,
21 GLVertexBuffer,
22 GLStencilTableSSBO,
23 GLPatchTable,
24 GLComputeEvaluator> {
25 public:
26 GpuEvalOutput(const StencilTable *vertex_stencils,
27 const StencilTable *varying_stencils,
28 const std::vector<const StencilTable *> &all_face_varying_stencils,
29 const int face_varying_width,
30 const PatchTable *patch_table,
31 EvaluatorCache *evaluator_cache = nullptr);
33 void fillPatchArraysBuffer(OpenSubdiv_Buffer *patch_arrays_buffer) override;
35 void wrapPatchIndexBuffer(OpenSubdiv_Buffer *patch_index_buffer) override;
37 void wrapPatchParamBuffer(OpenSubdiv_Buffer *patch_param_buffer) override;
39 void wrapSrcBuffer(OpenSubdiv_Buffer *src_buffer) override;
41 void wrapSrcVertexDataBuffer(OpenSubdiv_Buffer *src_buffer) override;
43 void fillFVarPatchArraysBuffer(const int face_varying_channel,
44 OpenSubdiv_Buffer *patch_arrays_buffer) override;
46 void wrapFVarPatchIndexBuffer(const int face_varying_channel,
47 OpenSubdiv_Buffer *patch_index_buffer) override;
49 void wrapFVarPatchParamBuffer(const int face_varying_channel,
50 OpenSubdiv_Buffer *patch_param_buffer) override;
52 void wrapFVarSrcBuffer(const int face_varying_channel, OpenSubdiv_Buffer *src_buffer) override;
55 } // namespace blender::opensubdiv
57 #endif // OPENSUBDIV_EVAL_OUTPUT_GPU_H_