Browse Source

libobs-d3d11: Store shader samplers as pointers

This allows having them be a part of a linked list later.
jp9000 9 years ago
parent
commit
7321cc38e8

+ 3 - 3
libobs-d3d11/d3d11-shaderprocessor.cpp

@@ -181,14 +181,14 @@ void ShaderProcessor::BuildParams(vector<gs_shader_param> &params)
 }
 
 static inline void AddSampler(gs_device_t *device, shader_sampler &sampler,
-		vector<ShaderSampler> &samplers)
+		vector<unique_ptr<ShaderSampler>> &samplers)
 {
 	gs_sampler_info si;
 	shader_sampler_convert(&sampler, &si);
-	samplers.push_back(ShaderSampler(sampler.name, device, &si));
+	samplers.emplace_back(new ShaderSampler(sampler.name, device, &si));
 }
 
-void ShaderProcessor::BuildSamplers(vector<ShaderSampler> &samplers)
+void ShaderProcessor::BuildSamplers(vector<unique_ptr<ShaderSampler>> &samplers)
 {
 	for (size_t i = 0; i < parser.samplers.num; i++)
 		AddSampler(device, parser.samplers.array[i], samplers);

+ 1 - 1
libobs-d3d11/d3d11-shaderprocessor.hpp

@@ -30,7 +30,7 @@ struct ShaderProcessor {
 
 	void BuildInputLayout(vector<D3D11_INPUT_ELEMENT_DESC> &inputs);
 	void BuildParams(vector<gs_shader_param> &params);
-	void BuildSamplers(vector<ShaderSampler> &samplers);
+	void BuildSamplers(vector<unique_ptr<ShaderSampler>> &samplers);
 	void BuildString(string &outputString);
 	void Process(const char *shader_string, const char *file);
 

+ 3 - 2
libobs-d3d11/d3d11-subsystem.hpp

@@ -22,6 +22,7 @@
 
 #include <vector>
 #include <string>
+#include <memory>
 
 #include <windows.h>
 #include <dxgi.h>
@@ -459,13 +460,13 @@ struct gs_duplicator {
 
 struct gs_pixel_shader : gs_shader {
 	ComPtr<ID3D11PixelShader> shader;
-	vector<ShaderSampler>     samplers;
+	vector<unique_ptr<ShaderSampler>> samplers;
 
 	inline void GetSamplerStates(ID3D11SamplerState **states)
 	{
 		size_t i;
 		for (i = 0; i < samplers.size(); i++)
-			states[i] = samplers[i].sampler.state;
+			states[i] = samplers[i]->sampler.state;
 		for (; i < GS_MAX_TEXTURES; i++)
 			states[i] = NULL;
 	}