Skip to content

Commit 866cccf

Browse files
committed
gpupixel: make forward declaration for types
1 parent 6f8d9cc commit 866cccf

19 files changed

+196
-212
lines changed

CMakeLists.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ else()
6666
SET(GAME_BUILD_TYPE "Debug")
6767
endif()
6868

69-
set(SDL2_VERSION "2.28.0")
69+
set(SDL2_VERSION "2.30.7")
7070
set(SDL2_MIXER_VERSION "2.0.4")
7171

7272
set(SDL2_EXTRACT_PATH "${CMAKE_CURRENT_SOURCE_DIR}/ext/SDL2")

ext/gpupixel/core/framebuffer.h

-3
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,6 @@ typedef struct {
1414
GLenum type;
1515
} TextureAttributes;
1616

17-
class Framebuffer;
18-
using FramebufferPtr = std::shared_ptr<Framebuffer>;
19-
2017
class Framebuffer {
2118
public:
2219
Framebuffer(int width, int height, bool onlyGenerateTexture = false, const TextureAttributes textureAttributes = defaultTextureAttribures);

ext/gpupixel/core/gpupixel_context.h

+2-4
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,6 @@
1010
#include "gl_program.h"
1111
#include "opengl3_loader.h"
1212

13-
class Filter;
14-
1513
NS_GPUPIXEL_BEGIN
1614

1715
class GPUPIXEL_API GPUPixelContext {
@@ -39,8 +37,8 @@ class GPUPIXEL_API GPUPixelContext {
3937

4038
// used for capturing a processed frame data
4139
bool isCapturingFrame;
42-
std::shared_ptr<Filter> captureUpToFilter;
43-
unsigned char* capturedFrameData;
40+
FilterPtr captureUpToFilter;
41+
std::vector<uint8_t> capturedFrameData;
4442
int captureWidth;
4543
int captureHeight;
4644

ext/gpupixel/core/gpupixel_macros.h

+34
Original file line numberDiff line numberDiff line change
@@ -109,3 +109,37 @@
109109
#else
110110
#define CHECK_GL(glFunc) glFunc;
111111
#endif
112+
113+
NS_GPUPIXEL_BEGIN
114+
115+
enum RotationMode {
116+
NoRotation = 0,
117+
RotateLeft,
118+
RotateRight,
119+
FlipVertical,
120+
FlipHorizontal,
121+
RotateRightFlipVertical,
122+
RotateRightFlipHorizontal,
123+
Rotate180
124+
};
125+
126+
class Source;
127+
using SourcePtr = std::shared_ptr<Source>;
128+
129+
class SourceImage;
130+
using SourceImagePtr = std::shared_ptr<SourceImage>;
131+
132+
class Target;
133+
using TargetPtr = std::shared_ptr<Target>;
134+
135+
class Framebuffer;
136+
using FramebufferPtr = std::shared_ptr<Framebuffer>;
137+
138+
class Source;
139+
using SourcePtr = std::shared_ptr<Source>;
140+
141+
class Filter;
142+
using FilterPtr = std::shared_ptr<Filter>;
143+
144+
145+
NS_GPUPIXEL_END

ext/gpupixel/filter/bilateral_filter.cc

+4-3
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
#include "bilateral_filter.h"
22

3+
#include "../core/framebuffer.h"
4+
35
NS_GPUPIXEL_BEGIN
46

57
REGISTER_FILTER_CLASS(BilateralMonoFilter)
@@ -121,9 +123,8 @@ BilateralMonoFilter::BilateralMonoFilter(Type type)
121123
_distanceNormalizationFactor(8.0) {
122124
}
123125

124-
BilateralMonoFilterPtr BilateralMonoFilter::create(
125-
Type type /* = HORIZONTAL*/) {
126-
auto ret = std::shared_ptr<BilateralMonoFilter>(new BilateralMonoFilter(type));
126+
BilateralMonoFilterPtr BilateralMonoFilter::create(Type type /* = HORIZONTAL*/) {
127+
auto ret = BilateralMonoFilterPtr(new BilateralMonoFilter(type));
127128
if (!ret || !ret->init()) {
128129
ret.reset();
129130
}

ext/gpupixel/filter/filter.cc

+5-2
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,12 @@
11
#include "filter.h"
2+
23
#include "../core/gpupixel.h"
34
#include "../core/gpupixel_context.h"
45

56
#include "../../../src/core/profiler.h"
67

8+
#include <string>
9+
710
NS_GPUPIXEL_BEGIN
811

912
std::map<std::string, std::function<std::shared_ptr<Filter>()>> initFilterFactory() {
@@ -240,8 +243,8 @@ void Filter::update(int64_t frameTime) {
240243
proceed(false);
241244

242245
_framebuffer->active();
243-
GPUPixelContext::getInstance()->capturedFrameData = new unsigned char[captureWidth * captureHeight * 4];
244-
CHECK_GL(glReadPixels(0, 0, captureWidth, captureHeight, GL_RGBA, GL_UNSIGNED_BYTE, GPUPixelContext::getInstance()->capturedFrameData));
246+
GPUPixelContext::getInstance()->capturedFrameData.resize(captureWidth * captureHeight * 4);
247+
CHECK_GL(glReadPixels(0, 0, captureWidth, captureHeight, GL_RGBA, GL_UNSIGNED_BYTE, GPUPixelContext::getInstance()->capturedFrameData.data()));
245248
_framebuffer->inactive();
246249
} else {
247250
// todo(Jeayo)

ext/gpupixel/filter/filter.h

+5-19
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,12 @@
1-
/*
2-
* GPUPixel
3-
*
4-
* Created by PixPark on 2021/6/24.
5-
* Copyright © 2021 PixPark. All rights reserved.
6-
*/
7-
81
#pragma once
92

103
#include "../core/gl_program.h"
11-
#include "../core/gpupixel_macros.h"
124
#include "../source/source.h"
13-
#include "../target/target.h"
145
#include "../utils/util.h"
6+
157
#include <string>
8+
#include <functional>
9+
#include <map>
1610

1711
NS_GPUPIXEL_BEGIN
1812
const std::string kDefaultVertexShader = R"(
@@ -41,9 +35,6 @@ const std::string kDefaultFragmentShader = R"(
4135
})";
4236
#endif
4337

44-
class Filter;
45-
using FilterPtr = std::shared_ptr<Filter>;
46-
4738
class Filter : public Source, public Target {
4839
public:
4940
virtual ~Filter();
@@ -100,12 +91,7 @@ class Filter : public Source, public Target {
10091
GLProgram *_filterProgram;
10192
GLuint _filterPositionAttribute;
10293
std::string _filterClassName;
103-
struct {
104-
float r;
105-
float g;
106-
float b;
107-
float a;
108-
} _backgroundColor;
94+
struct { float r, g, b, a; } _backgroundColor;
10995

11096
Filter();
11197

@@ -147,7 +133,7 @@ class Filter : public Source, public Target {
147133
std::map<std::string, StringProperty> _stringProperties;
148134

149135
private:
150-
static std::map<std::string, std::function<std::shared_ptr<Filter>()>> _filterFactories;
136+
static std::map<std::string, std::function<FilterPtr()>> _filterFactories;
151137
};
152138

153139
#define REGISTER_FILTER_CLASS(className)

ext/gpupixel/filter/filter_group.cc

+8-14
Original file line numberDiff line numberDiff line change
@@ -89,16 +89,15 @@ std::shared_ptr<Filter> FilterGroup::_predictTerminalFilter(
8989
}
9090
}
9191

92-
std::shared_ptr<Source> FilterGroup::addTarget(std::shared_ptr<Target> target) {
92+
std::shared_ptr<Source> FilterGroup::addTarget(TargetPtr target) {
9393
if (_terminalFilter) {
9494
return _terminalFilter->addTarget(target);
9595
} else {
9696
return 0;
9797
}
9898
}
9999

100-
std::shared_ptr<Source> FilterGroup::addTarget(std::shared_ptr<Target> target,
101-
int inputNumber) {
100+
std::shared_ptr<Source> FilterGroup::addTarget(TargetPtr target, int inputNumber) {
102101
if (_terminalFilter) {
103102
return _terminalFilter->addTarget(target, inputNumber);
104103
} else {
@@ -116,7 +115,7 @@ std::shared_ptr<Source> FilterGroup::addTarget(id<GPUPixelTarget> target) {
116115
}
117116
#endif
118117

119-
void FilterGroup::removeTarget(std::shared_ptr<Target> target) {
118+
void FilterGroup::removeTarget(TargetPtr target) {
120119
if (_terminalFilter) {
121120
_terminalFilter->removeTarget(target);
122121
}
@@ -128,15 +127,15 @@ void FilterGroup::removeAllTargets() {
128127
}
129128
}
130129

131-
bool FilterGroup::hasTarget(const std::shared_ptr<Target> target) const {
130+
bool FilterGroup::hasTarget(const TargetPtr target) const {
132131
if (_terminalFilter) {
133132
return _terminalFilter->hasTarget(target);
134133
} else {
135134
return false;
136135
}
137136
}
138137

139-
std::map<std::shared_ptr<Target>, int>& FilterGroup::getTargets() {
138+
std::map<TargetPtr, int>& FilterGroup::getTargets() {
140139
assert(_terminalFilter);
141140
return _terminalFilter->getTargets();
142141
}
@@ -165,23 +164,18 @@ void FilterGroup::updateTargets(int64_t frameTime) {
165164
}
166165
}
167166

168-
void FilterGroup::setFramebuffer(
169-
std::shared_ptr<Framebuffer> fb,
170-
RotationMode outputRotation /* = RotationMode::NoRotation*/) {
167+
void FilterGroup::setFramebuffer(FramebufferPtr fb, RotationMode outputRotation /* = RotationMode::NoRotation*/) {
171168
// if (_terminalFilter)
172169
// _terminalFilter->setFramebuffer(fb);
173170
}
174171

175-
std::shared_ptr<Framebuffer> FilterGroup::getFramebuffer() const {
172+
FramebufferPtr FilterGroup::getFramebuffer() const {
176173
// if (_terminalFilter)
177174
// return _terminalFilter->getFramebuffer();
178175
return 0;
179176
}
180177

181-
void FilterGroup::setInputFramebuffer(
182-
std::shared_ptr<Framebuffer> framebuffer,
183-
RotationMode rotationMode /* = NoRotation*/,
184-
int texIdx /* = 0*/) {
178+
void FilterGroup::setInputFramebuffer(FramebufferPtr framebuffer, RotationMode rotationMode /* = NoRotation*/, int texIdx /* = 0*/) {
185179
for (auto& filter : _filters) {
186180
filter->setInputFramebuffer(framebuffer, rotationMode, texIdx);
187181
}

ext/gpupixel/filter/filter_group.h

+14-22
Original file line numberDiff line numberDiff line change
@@ -20,14 +20,13 @@ class FilterGroup : public Filter {
2020
virtual ~FilterGroup();
2121

2222
static std::shared_ptr<FilterGroup> create();
23-
static std::shared_ptr<FilterGroup> create(
24-
std::vector<std::shared_ptr<Filter>> filters);
23+
static std::shared_ptr<FilterGroup> create(std::vector<std::shared_ptr<Filter>> filters);
2524

2625
bool init();
27-
bool init(std::vector<std::shared_ptr<Filter>> filters);
28-
bool hasFilter(const std::shared_ptr<Filter> filter) const;
29-
void addFilter(std::shared_ptr<Filter> filter);
30-
void removeFilter(std::shared_ptr<Filter> filter);
26+
bool init(std::vector<FilterPtr> filters);
27+
bool hasFilter(const FilterPtr filter) const;
28+
void addFilter(FilterPtr filter);
29+
void removeFilter(FilterPtr filter);
3130
void removeAllFilters();
3231

3332
// Manually specify the terminal filter, which is the final output filter of
@@ -37,29 +36,22 @@ class FilterGroup : public Filter {
3736
_terminalFilter = filter;
3837
}
3938

40-
virtual std::shared_ptr<Source> addTarget(
41-
std::shared_ptr<Target> target) override;
42-
virtual std::shared_ptr<Source> addTarget(std::shared_ptr<Target> target,
43-
int inputNumber) override;
39+
virtual std::shared_ptr<Source> addTarget(TargetPtr target) override;
40+
virtual std::shared_ptr<Source> addTarget(TargetPtr target, int inputNumber) override;
4441
#if defined(GPUPIXEL_IOS) || defined(GPUPIXEL_MAC)
4542
virtual std::shared_ptr<Source> addTarget(id<GPUPixelTarget> target) override;
4643
#endif
47-
virtual void removeTarget(std::shared_ptr<Target> target) override;
44+
virtual void removeTarget(TargetPtr target) override;
4845
virtual void removeAllTargets() override;
49-
virtual bool hasTarget(const std::shared_ptr<Target> target) const override;
50-
virtual std::map<std::shared_ptr<Target>, int>& getTargets() override;
51-
virtual bool proceed(bool bUpdateTargets = true,
52-
int64_t frameTime = 0) override;
46+
virtual bool hasTarget(const TargetPtr target) const override;
47+
virtual std::map<TargetPtr, int>& getTargets() override;
48+
virtual bool proceed(bool bUpdateTargets = true,int64_t frameTime = 0) override;
5349
virtual void update(int64_t frameTime) override;
5450
virtual void updateTargets(int64_t frameTime) override;
55-
virtual void setFramebuffer(
56-
std::shared_ptr<Framebuffer> fb,
57-
RotationMode outputRotation = RotationMode::NoRotation) override;
51+
virtual void setFramebuffer(FramebufferPtr fb, RotationMode outputRotation = RotationMode::NoRotation) override;
5852

59-
virtual std::shared_ptr<Framebuffer> getFramebuffer() const override;
60-
virtual void setInputFramebuffer(std::shared_ptr<Framebuffer> framebuffer,
61-
RotationMode rotationMode = NoRotation,
62-
int texIdx = 0) override;
53+
virtual FramebufferPtr getFramebuffer() const override;
54+
virtual void setInputFramebuffer(FramebufferPtr framebuffer, RotationMode rotationMode = NoRotation, int texIdx = 0) override;
6355

6456
virtual bool isPrepared() const override;
6557
virtual void unPrepear() override;

0 commit comments

Comments
 (0)