source: opengl-game/blend-ref.cpp@ 2c87504

feature/imgui-sdl points-test
Last change on this file since 2c87504 was 2c87504, checked in by Dmitry Portnoy <dmp1488@…>, 5 years ago

Add reference blending code

  • Property mode set to 100644
File size: 5.0 KB
Line 
1# Create graphic pipeline
2vertex_input_create = VkPipelineVertexInputStateCreateInfo(
3 sType = VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO,
4 flags = 0,
5 vertexBindingDescriptionCount = 1,
6 pVertexBindingDescriptions = buffers.standard.description,
7 vertexAttributeDescriptionCount = len(buffers.standard.attributes),
8 pVertexAttributeDescriptions = buffers.standard.attributes);
9
10input_assembly_create = VkPipelineInputAssemblyStateCreateInfo(
11 sType = VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO,
12 flags = 0,
13 topology = VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST,
14 primitiveRestartEnable = VK_FALSE);
15viewport = VkViewport(
16 x = 0., y = 0., width = float(self.extent.width), height = float(self.extent.height),
17 minDepth = 0., maxDepth = 1.);
18
19scissor_offset = VkOffset2D(x = 0, y = 0);
20scissor = VkRect2D(offset = scissor_offset, extent = self.extent);
21viewport_state_create = VkPipelineViewportStateCreateInfo(
22 sType = VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO,
23 flags = 0,
24 viewportCount = 1,
25 pViewports = [viewport],
26 scissorCount = 1,
27 pScissors = [scissor]);
28
29rasterizer_create = VkPipelineRasterizationStateCreateInfo(
30 sType = VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO,
31 flags = 0,
32 depthClampEnable = VK_FALSE,
33 rasterizerDiscardEnable = VK_FALSE,
34 polygonMode = VK_POLYGON_MODE_FILL,
35 lineWidth = 1,
36 cullMode = VK_CULL_MODE_NONE, #VK_CULL_MODE_BACK_BIT,
37 frontFace = VK_FRONT_FACE_COUNTER_CLOCKWISE, #VK_FRONT_FACE_CLOCKWISE,
38 depthBiasEnable = VK_FALSE,
39 depthBiasConstantFactor = 0.,
40 depthBiasClamp = 0.,
41 depthBiasSlopeFactor = 0.);
42
43multisample_create = VkPipelineMultisampleStateCreateInfo(
44 sType = VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO,
45 flags = 0,
46 sampleShadingEnable = VK_TRUE,
47 rasterizationSamples = 2 * *self.config["multisamplelevel"],
48 minSampleShading = 1,
49 pSampleMask = None,
50 alphaToCoverageEnable = VK_FALSE,
51 alphaToOneEnable = VK_FALSE);
52
53color_blend_attachement = VkPipelineColorBlendAttachmentState(
54 colorWriteMask = VK_COLOR_COMPONENT_R_BIT | VK_COLOR_COMPONENT_G_BIT | VK_COLOR_COMPONENT_B_BIT | VK_COLOR_COMPONENT_A_BIT,
55 blendEnable = VK_FALSE,
56 srcColorBlendFactor = VK_BLEND_FACTOR_SRC_COLOR,
57 dstColorBlendFactor = VK_BLEND_FACTOR_ONE_MINUS_SRC_COLOR,
58 colorBlendOp = VK_BLEND_OP_ADD,
59 #srcAlphaBlendFactor = VK_BLEND_FACTOR_ZERO,
60 #dstAlphaBlendFactor = VK_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA,
61 alphaBlendOp = VK_BLEND_OP_ADD);
62
63color_blend_create = VkPipelineColorBlendStateCreateInfo(
64 sType = VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO,
65 flags = 0,
66 logicOpEnable = VK_FALSE,
67 logicOp = VK_LOGIC_OP_COPY,
68 attachmentCount = 1,
69 pAttachments = [color_blend_attachement],
70 blendConstants = [0, 0, 0, 0]);
71
72push_constant_ranges = VkPushConstantRange(
73 stageFlags = 0,
74 offset = 0,
75 size = 0);
76
77samplerlayoutbinding = VkDescriptorSetLayoutBinding(
78 binding = 1,
79 descriptorCount = 1,
80 descriptorType = VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER,
81 pImmutableSamplers = None,
82 stageFlags = VK_SHADER_STAGE_FRAGMENT_BIT,
83
84 );
85
86layoutbindings = [ubo.descriptor, samplerlayoutbinding];
87
88layoutinfo = VkDescriptorSetLayoutCreateInfo(
89 VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO,
90 bindingCount = len(layoutbindings),
91 pBindings = layoutbindings,
92
93 );
94self.descriptorsetlayout = vkCreateDescriptorSetLayout(self.logical_device, layoutinfo, None);
95
96
97
98pipeline_layout_create = VkPipelineLayoutCreateInfo(
99 sType = VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO,
100 flags = 0,
101 setLayoutCount = 1,
102 pSetLayouts = [self.descriptorsetlayout],
103 pushConstantRangeCount = 0,
104 pPushConstantRanges = [push_constant_ranges]);
105
106self.pipeline_layout = vkCreatePipelineLayout(self.logical_device, pipeline_layout_create, None);
107
108depthstencil = VkPipelineDepthStencilStateCreateInfo(
109 sType = VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO,
110 depthTestEnable = VK_TRUE,
111 depthWriteEnable = VK_TRUE,
112 depthCompareOp = VK_COMPARE_OP_LESS,
113 depthBoundsTestEnable = VK_FALSE,
114 minDepthBounds = 0,
115 maxDepthBounds = 1,
116 stencilTestEnable = VK_FALSE,
117 );
118
119# Finally create graphic pipeline
120pipeline_create = VkGraphicsPipelineCreateInfo(
121 sType = VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO,
122 flags = 0,
123 stageCount = 2,
124 pStages = [shaders.shaderlibrary["orthogonal_vert"].pipelinebit, shaders.shaderlibrary["generic_frag"].pipelinebit],
125 pVertexInputState = vertex_input_create,
126 pInputAssemblyState = input_assembly_create,
127 pTessellationState = None,
128 pViewportState = viewport_state_create,
129 pRasterizationState = rasterizer_create,
130 pMultisampleState = multisample_create,
131 pDepthStencilState = depthstencil,
132 pColorBlendState = color_blend_create,
133 pDynamicState = None,
134 layout = self.pipeline_layout,
135 renderPass = self.render_pass.render_pass,
136 subpass = 0,
137 basePipelineHandle = None,
138 basePipelineIndex = -1);
139
140self.pipeline = vkCreateGraphicsPipelines(self.logical_device, None, 1, [pipeline_create], None);
Note: See TracBrowser for help on using the repository browser.