Skip to content

Commit fe3dab1

Browse files
committed
gobj: slightly more efficient string handling in Shader::make()
1 parent 1cada85 commit fe3dab1

File tree

3 files changed

+33
-39
lines changed

3 files changed

+33
-39
lines changed

panda/src/gobj/shader.I

Lines changed: 9 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -694,27 +694,24 @@ read_datagram(DatagramIterator &scan) {
694694
*
695695
*/
696696
INLINE Shader::ShaderFile::
697-
ShaderFile(const string &shared) :
697+
ShaderFile(string shared) :
698698
_separate(false),
699-
_shared(shared)
699+
_shared(move(shared))
700700
{
701701
}
702702

703703
/**
704704
*
705705
*/
706706
INLINE Shader::ShaderFile::
707-
ShaderFile(const string &vertex,
708-
const string &fragment,
709-
const string &geometry,
710-
const string &tess_control,
711-
const string &tess_evaluation) :
707+
ShaderFile(string vertex, string fragment, string geometry,
708+
string tess_control, string tess_evaluation) :
712709
_separate(true),
713-
_vertex(vertex),
714-
_fragment(fragment),
715-
_geometry(geometry),
716-
_tess_control(tess_control),
717-
_tess_evaluation(tess_evaluation)
710+
_vertex(move(vertex)),
711+
_fragment(move(fragment)),
712+
_geometry(move(geometry)),
713+
_tess_control(move(tess_control)),
714+
_tess_evaluation(move(tess_evaluation))
718715
{
719716
}
720717

panda/src/gobj/shader.cxx

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -3179,7 +3179,7 @@ load_compute(ShaderLanguage lang, const Filename &fn) {
31793179
* Loads the shader, using the string as shader body.
31803180
*/
31813181
PT(Shader) Shader::
3182-
make(const string &body, ShaderLanguage lang) {
3182+
make(string body, ShaderLanguage lang) {
31833183
if (lang == SL_GLSL) {
31843184
shader_cat.error()
31853185
<< "GLSL shaders must have separate shader bodies!\n";
@@ -3197,7 +3197,7 @@ make(const string &body, ShaderLanguage lang) {
31973197
}
31983198
#endif
31993199

3200-
ShaderFile sbody(body);
3200+
ShaderFile sbody(move(body));
32013201

32023202
if (cache_generated_shaders) {
32033203
ShaderTable::const_iterator i = _make_table.find(sbody);
@@ -3208,7 +3208,7 @@ make(const string &body, ShaderLanguage lang) {
32083208

32093209
PT(Shader) shader = new Shader(lang);
32103210
shader->_filename = ShaderFile("created-shader");
3211-
shader->_text = sbody;
3211+
shader->_text = move(sbody);
32123212

32133213
#ifdef HAVE_CG
32143214
if (lang == SL_Cg) {
@@ -3223,7 +3223,7 @@ make(const string &body, ShaderLanguage lang) {
32233223
#endif
32243224

32253225
if (cache_generated_shaders) {
3226-
_make_table[sbody] = shader;
3226+
_make_table[shader->_text] = shader;
32273227
}
32283228

32293229
if (dump_generated_shaders) {
@@ -3235,7 +3235,7 @@ make(const string &body, ShaderLanguage lang) {
32353235

32363236
pofstream s;
32373237
s.open(fn.c_str(), ios::out | ios::trunc);
3238-
s << body;
3238+
s << shader->get_text();
32393239
s.close();
32403240
}
32413241
return shader;
@@ -3245,9 +3245,8 @@ make(const string &body, ShaderLanguage lang) {
32453245
* Loads the shader, using the strings as shader bodies.
32463246
*/
32473247
PT(Shader) Shader::
3248-
make(ShaderLanguage lang, const string &vertex, const string &fragment,
3249-
const string &geometry, const string &tess_control,
3250-
const string &tess_evaluation) {
3248+
make(ShaderLanguage lang, string vertex, string fragment, string geometry,
3249+
string tess_control, string tess_evaluation) {
32513250
#ifndef HAVE_CG
32523251
if (lang == SL_Cg) {
32533252
shader_cat.error() << "Support for Cg shaders is not enabled.\n";
@@ -3260,7 +3259,8 @@ make(ShaderLanguage lang, const string &vertex, const string &fragment,
32603259
return NULL;
32613260
}
32623261

3263-
ShaderFile sbody(vertex, fragment, geometry, tess_control, tess_evaluation);
3262+
ShaderFile sbody(move(vertex), move(fragment), move(geometry),
3263+
move(tess_control), move(tess_evaluation));
32643264

32653265
if (cache_generated_shaders) {
32663266
ShaderTable::const_iterator i = _make_table.find(sbody);
@@ -3271,7 +3271,7 @@ make(ShaderLanguage lang, const string &vertex, const string &fragment,
32713271

32723272
PT(Shader) shader = new Shader(lang);
32733273
shader->_filename = ShaderFile("created-shader");
3274-
shader->_text = sbody;
3274+
shader->_text = move(sbody);
32753275

32763276
#ifdef HAVE_CG
32773277
if (lang == SL_Cg) {
@@ -3284,7 +3284,7 @@ make(ShaderLanguage lang, const string &vertex, const string &fragment,
32843284
#endif
32853285

32863286
if (cache_generated_shaders) {
3287-
_make_table[sbody] = shader;
3287+
_make_table[shader->_text] = shader;
32883288
}
32893289

32903290
return shader;
@@ -3294,7 +3294,7 @@ make(ShaderLanguage lang, const string &vertex, const string &fragment,
32943294
* Loads the compute shader from the given string.
32953295
*/
32963296
PT(Shader) Shader::
3297-
make_compute(ShaderLanguage lang, const string &body) {
3297+
make_compute(ShaderLanguage lang, string body) {
32983298
if (lang != SL_GLSL) {
32993299
shader_cat.error()
33003300
<< "Only GLSL compute shaders are currently supported.\n";
@@ -3303,7 +3303,7 @@ make_compute(ShaderLanguage lang, const string &body) {
33033303

33043304
ShaderFile sbody;
33053305
sbody._separate = true;
3306-
sbody._compute = body;
3306+
sbody._compute = move(body);
33073307

33083308
if (cache_generated_shaders) {
33093309
ShaderTable::const_iterator i = _make_table.find(sbody);
@@ -3314,10 +3314,10 @@ make_compute(ShaderLanguage lang, const string &body) {
33143314

33153315
PT(Shader) shader = new Shader(lang);
33163316
shader->_filename = ShaderFile("created-shader");
3317-
shader->_text = sbody;
3317+
shader->_text = move(sbody);
33183318

33193319
if (cache_generated_shaders) {
3320-
_make_table[sbody] = shader;
3320+
_make_table[shader->_text] = shader;
33213321
}
33223322

33233323
return shader;

panda/src/gobj/shader.h

Lines changed: 9 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -84,19 +84,19 @@ class EXPCL_PANDA_GOBJ Shader : public TypedWritableReferenceCount {
8484
};
8585

8686
static PT(Shader) load(const Filename &file, ShaderLanguage lang = SL_none);
87-
static PT(Shader) make(const string &body, ShaderLanguage lang = SL_none);
87+
static PT(Shader) make(string body, ShaderLanguage lang = SL_none);
8888
static PT(Shader) load(ShaderLanguage lang,
8989
const Filename &vertex, const Filename &fragment,
9090
const Filename &geometry = "",
9191
const Filename &tess_control = "",
9292
const Filename &tess_evaluation = "");
9393
static PT(Shader) load_compute(ShaderLanguage lang, const Filename &fn);
9494
static PT(Shader) make(ShaderLanguage lang,
95-
const string &vertex, const string &fragment,
96-
const string &geometry = "",
97-
const string &tess_control = "",
98-
const string &tess_evaluation = "");
99-
static PT(Shader) make_compute(ShaderLanguage lang, const string &body);
95+
string vertex, string fragment,
96+
string geometry = "",
97+
string tess_control = "",
98+
string tess_evaluation = "");
99+
static PT(Shader) make_compute(ShaderLanguage lang, string body);
100100

101101
INLINE Filename get_filename(ShaderType type = ST_none) const;
102102
INLINE void set_filename(ShaderType type, const Filename &filename);
@@ -464,12 +464,9 @@ class EXPCL_PANDA_GOBJ Shader : public TypedWritableReferenceCount {
464464
class ShaderFile : public ReferenceCount {
465465
public:
466466
INLINE ShaderFile() {};
467-
INLINE ShaderFile(const string &shared);
468-
INLINE ShaderFile(const string &vertex,
469-
const string &fragment,
470-
const string &geometry,
471-
const string &tess_control,
472-
const string &tess_evaluation);
467+
INLINE ShaderFile(string shared);
468+
INLINE ShaderFile(string vertex, string fragment, string geometry,
469+
string tess_control, string tess_evaluation);
473470

474471
INLINE void write_datagram(Datagram &dg) const;
475472
INLINE void read_datagram(DatagramIterator &source);

0 commit comments

Comments
 (0)