Chris Dalton | c17bf32 | 2017-10-24 10:59:03 -0600 | [diff] [blame] | 1 | /* |
| 2 | * Copyright 2017 Google Inc. |
| 3 | * |
| 4 | * Use of this source code is governed by a BSD-style license that can be |
| 5 | * found in the LICENSE file. |
| 6 | */ |
| 7 | |
| 8 | #ifndef GrGLSLVertexGeoBuilder_DEFINED |
| 9 | #define GrGLSLVertexGeoBuilder_DEFINED |
| 10 | |
Brian Salomon | f95940b | 2021-08-09 15:56:24 -0400 | [diff] [blame] | 11 | #include "src/gpu/GrGeometryProcessor.h" |
Mike Klein | c0bd9f9 | 2019-04-23 12:05:21 -0500 | [diff] [blame] | 12 | #include "src/gpu/glsl/GrGLSLShaderBuilder.h" |
Chris Dalton | c17bf32 | 2017-10-24 10:59:03 -0600 | [diff] [blame] | 13 | |
| 14 | /** |
Brian Osman | 99ddd2a | 2021-08-27 11:21:12 -0400 | [diff] [blame] | 15 | * Base class for vertex shader builder. This is the stage that computes input geometry for the |
| 16 | * rasterizer. |
Chris Dalton | c17bf32 | 2017-10-24 10:59:03 -0600 | [diff] [blame] | 17 | */ |
| 18 | class GrGLSLVertexGeoBuilder : public GrGLSLShaderBuilder { |
Chris Dalton | 418eda2 | 2020-10-16 10:38:39 -0600 | [diff] [blame] | 19 | public: |
| 20 | // Copies the given text verbatim to the function definitions section. Does not mangle the name. |
| 21 | // 'functionDefinition' should be a fully valid SkSL function, complete with return type, name, |
| 22 | // arguments, braces, and a body. |
| 23 | void insertFunction(const char* functionDefinition) { |
| 24 | this->functions().append(functionDefinition); |
| 25 | } |
Chris Dalton | 7b80726 | 2020-12-10 10:22:50 -0700 | [diff] [blame] | 26 | using GrGLSLShaderBuilder::functions; |
Chris Dalton | e73c070 | 2021-05-15 14:17:22 -0600 | [diff] [blame] | 27 | using GrGLSLShaderBuilder::code; |
Chris Dalton | 418eda2 | 2020-10-16 10:38:39 -0600 | [diff] [blame] | 28 | |
Chris Dalton | c17bf32 | 2017-10-24 10:59:03 -0600 | [diff] [blame] | 29 | protected: |
| 30 | GrGLSLVertexGeoBuilder(GrGLSLProgramBuilder* program) : INHERITED(program) {} |
| 31 | |
Brian Osman | 5d8b7e9 | 2020-09-21 17:51:25 -0400 | [diff] [blame] | 32 | void emitNormalizedSkPosition(const char* devPos, |
Chris Dalton | c17bf32 | 2017-10-24 10:59:03 -0600 | [diff] [blame] | 33 | GrSLType devPosType = GrSLType::kFloat2_GrSLType) { |
Brian Osman | 5d8b7e9 | 2020-09-21 17:51:25 -0400 | [diff] [blame] | 34 | this->emitNormalizedSkPosition(&this->code(), devPos, devPosType); |
Chris Dalton | c17bf32 | 2017-10-24 10:59:03 -0600 | [diff] [blame] | 35 | } |
| 36 | |
Brian Osman | 5d8b7e9 | 2020-09-21 17:51:25 -0400 | [diff] [blame] | 37 | void emitNormalizedSkPosition(SkString* out, const char* devPos, |
Chris Dalton | c17bf32 | 2017-10-24 10:59:03 -0600 | [diff] [blame] | 38 | GrSLType devPosType = GrSLType::kFloat2_GrSLType); |
| 39 | |
Brian Salomon | f95940b | 2021-08-09 15:56:24 -0400 | [diff] [blame] | 40 | friend class GrGeometryProcessor::ProgramImpl; |
Chris Dalton | c17bf32 | 2017-10-24 10:59:03 -0600 | [diff] [blame] | 41 | |
John Stiles | 7571f9e | 2020-09-02 22:42:33 -0400 | [diff] [blame] | 42 | using INHERITED = GrGLSLShaderBuilder; |
Chris Dalton | c17bf32 | 2017-10-24 10:59:03 -0600 | [diff] [blame] | 43 | }; |
| 44 | |
| 45 | |
| 46 | class GrGLSLVertexBuilder : public GrGLSLVertexGeoBuilder { |
| 47 | public: |
| 48 | GrGLSLVertexBuilder(GrGLSLProgramBuilder* program) : INHERITED(program) {} |
| 49 | |
| 50 | private: |
| 51 | void onFinalize() override; |
| 52 | |
| 53 | friend class GrGLProgramBuilder; |
| 54 | |
John Stiles | 7571f9e | 2020-09-02 22:42:33 -0400 | [diff] [blame] | 55 | using INHERITED = GrGLSLVertexGeoBuilder; |
Chris Dalton | c17bf32 | 2017-10-24 10:59:03 -0600 | [diff] [blame] | 56 | }; |
| 57 | |
Chris Dalton | c17bf32 | 2017-10-24 10:59:03 -0600 | [diff] [blame] | 58 | #endif |