Skip to content

Commit 009d320

Browse files
committed
Use GL samplers
1 parent d1dbb93 commit 009d320

4 files changed

Lines changed: 49 additions & 22 deletions

File tree

pathfinder/gpu/gl/command_encoder.cpp

Lines changed: 4 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
#include "framebuffer.h"
1010
#include "render_pass.h"
1111
#include "render_pipeline.h"
12+
#include "sampler.h"
1213

1314
namespace Pathfinder {
1415

@@ -177,29 +178,11 @@ bool CommandEncoderGl::finish() {
177178
auto texture_gl = static_cast<TextureGl *>(descriptor.texture.get());
178179

179180
glActiveTexture(GL_TEXTURE0 + binding_point);
180-
181-
auto sampler_descriptor = descriptor.sampler->get_descriptor();
182-
183181
glBindTexture(GL_TEXTURE_2D, texture_gl->get_texture_id());
184182

185-
// Set texture sampler.
186-
// --------------------------------------------------------------
187-
// Set wrapping parameters.
188-
glTexParameteri(GL_TEXTURE_2D,
189-
GL_TEXTURE_WRAP_S,
190-
to_gl_sampler_address_mode(sampler_descriptor.address_mode_u));
191-
glTexParameteri(GL_TEXTURE_2D,
192-
GL_TEXTURE_WRAP_T,
193-
to_gl_sampler_address_mode(sampler_descriptor.address_mode_v));
194-
195-
// Set filtering parameters.
196-
glTexParameteri(GL_TEXTURE_2D,
197-
GL_TEXTURE_MIN_FILTER,
198-
to_gl_sampler_filter(sampler_descriptor.min_filter));
199-
glTexParameteri(GL_TEXTURE_2D,
200-
GL_TEXTURE_MAG_FILTER,
201-
to_gl_sampler_filter(sampler_descriptor.mag_filter));
202-
// --------------------------------------------------------------
183+
// Set sampler.
184+
auto sampler_gl = static_cast<SamplerGl *>(descriptor.sampler.get());
185+
glBindSampler(binding_point, sampler_gl->get_handle());
203186

204187
gl_check_error("bind texture");
205188
} break;

pathfinder/gpu/gl/device.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
#include "framebuffer.h"
88
#include "render_pass.h"
99
#include "render_pipeline.h"
10+
#include "sampler.h"
1011
#include "shader_module.h"
1112

1213
namespace Pathfinder {
@@ -50,7 +51,7 @@ std::shared_ptr<Texture> DeviceGl::wrap_texture(uint32_t external_gl_id, const T
5051
}
5152

5253
std::shared_ptr<Sampler> DeviceGl::create_sampler(SamplerDescriptor descriptor) {
53-
return std::shared_ptr<Sampler>(new Sampler(descriptor));
54+
return std::shared_ptr<SamplerGl>(new SamplerGl(descriptor));
5455
}
5556

5657
std::shared_ptr<CommandEncoder> DeviceGl::create_command_encoder(const std::string &label) {

pathfinder/gpu/gl/sampler.cpp

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
#include "sampler.h"
2+
3+
#include "base.h"
4+
5+
namespace Pathfinder {
6+
7+
SamplerGl::SamplerGl(SamplerDescriptor descriptor) : Sampler(descriptor) {
8+
glGenSamplers(1, &id_);
9+
10+
glSamplerParameteri(id_, GL_TEXTURE_WRAP_S, to_gl_sampler_address_mode(descriptor.address_mode_u));
11+
glSamplerParameteri(id_, GL_TEXTURE_WRAP_T, to_gl_sampler_address_mode(descriptor.address_mode_v));
12+
glSamplerParameteri(id_, GL_TEXTURE_MIN_FILTER, to_gl_sampler_filter(descriptor.min_filter));
13+
glSamplerParameteri(id_, GL_TEXTURE_MAG_FILTER, to_gl_sampler_filter(descriptor.mag_filter));
14+
}
15+
16+
SamplerGl::~SamplerGl() {
17+
glDeleteSamplers(1, &id_);
18+
}
19+
20+
} // namespace Pathfinder

pathfinder/gpu/gl/sampler.h

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
#pragma once
2+
3+
#include <cstdint>
4+
5+
#include "../texture.h"
6+
7+
namespace Pathfinder {
8+
9+
class SamplerGl : public Sampler {
10+
public:
11+
explicit SamplerGl(SamplerDescriptor descriptor);
12+
13+
~SamplerGl() override;
14+
15+
uint32_t get_handle() const {
16+
return id_;
17+
}
18+
19+
private:
20+
uint32_t id_{};
21+
};
22+
23+
} // namespace Pathfinder

0 commit comments

Comments
 (0)