mirror of
https://github.com/panda3d/panda3d.git
synced 2025-10-17 20:23:47 -04:00
Shader modifications
This commit is contained in:
parent
405960a827
commit
9ad64a6b4b
@ -16,24 +16,6 @@
|
|||||||
//
|
//
|
||||||
////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////
|
|
||||||
// Function: GLShaderContext::Constructor
|
|
||||||
// Access: Public
|
|
||||||
// Description: xyz
|
|
||||||
////////////////////////////////////////////////////////////////////
|
|
||||||
INLINE CLP(ShaderContext)::
|
|
||||||
CLP(ShaderContext)(Shader *s) : ShaderContext(s) {
|
|
||||||
}
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////
|
|
||||||
// Function: GLShaderContext::Destructor
|
|
||||||
// Access: Public
|
|
||||||
// Description: xyz
|
|
||||||
////////////////////////////////////////////////////////////////////
|
|
||||||
INLINE CLP(ShaderContext)::
|
|
||||||
~CLP(ShaderContext)(void) {
|
|
||||||
}
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////
|
||||||
// Function: GLShaderContext::bind
|
// Function: GLShaderContext::bind
|
||||||
// Access: Public
|
// Access: Public
|
||||||
|
@ -17,3 +17,27 @@
|
|||||||
////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
TypeHandle CLP(ShaderContext)::_type_handle;
|
TypeHandle CLP(ShaderContext)::_type_handle;
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
// Function: GLShaderContext::Constructor
|
||||||
|
// Access: Public
|
||||||
|
// Description: xyz
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
CLP(ShaderContext)::
|
||||||
|
CLP(ShaderContext)(Shader *s) : ShaderContext(s) {
|
||||||
|
string header, body;
|
||||||
|
s->parse_init();
|
||||||
|
s->parse_line(header, true, true);
|
||||||
|
s->parse_rest(body);
|
||||||
|
cerr << "Compiling shader. Language=" << header << " Body=\n" << body << "\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
// Function: GLShaderContext::Destructor
|
||||||
|
// Access: Public
|
||||||
|
// Description: xyz
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
CLP(ShaderContext)::
|
||||||
|
~CLP(ShaderContext)(void) {
|
||||||
|
}
|
||||||
|
|
||||||
|
@ -26,12 +26,12 @@
|
|||||||
|
|
||||||
class EXPCL_GL CLP(ShaderContext): public ShaderContext {
|
class EXPCL_GL CLP(ShaderContext): public ShaderContext {
|
||||||
public:
|
public:
|
||||||
INLINE CLP(ShaderContext)(Shader *shader);
|
CLP(ShaderContext)(Shader *shader);
|
||||||
INLINE ~CLP(ShaderContext)(void);
|
~CLP(ShaderContext)(void);
|
||||||
|
|
||||||
void bind(ShaderMode *mode);
|
INLINE void bind(ShaderMode *mode);
|
||||||
void unbind(void);
|
INLINE void unbind(void);
|
||||||
void rebind(ShaderMode *oldmode, ShaderMode *newmode);
|
INLINE void rebind(ShaderMode *oldmode, ShaderMode *newmode);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
static TypeHandle get_class_type() {
|
static TypeHandle get_class_type() {
|
||||||
|
@ -42,6 +42,89 @@ Shader::
|
|||||||
release_all();
|
release_all();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
// Function: Shader::parse_init
|
||||||
|
// Access: Public
|
||||||
|
// Description: Set a 'parse pointer' to the beginning of the shader.
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
void Shader::
|
||||||
|
parse_init(void) {
|
||||||
|
_parse = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
// Function: Shader::parse_line
|
||||||
|
// Access: Public
|
||||||
|
// Description: Parse a line of text. If 'lt' is true, trim blanks
|
||||||
|
// from the left end of the line. If 'rt' is true, trim
|
||||||
|
// blanks from the right end (the newline is always
|
||||||
|
// trimmed).
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
void Shader::
|
||||||
|
parse_line(string &result, bool lt, bool rt) {
|
||||||
|
int len = _text.size();
|
||||||
|
int head = _parse;
|
||||||
|
int tail = head;
|
||||||
|
while ((tail < len) && (_text[tail] != '\n')) tail++;
|
||||||
|
if (tail < len) {
|
||||||
|
_parse = tail+1;
|
||||||
|
} else {
|
||||||
|
_parse = tail;
|
||||||
|
}
|
||||||
|
if (lt) {
|
||||||
|
while ((head < tail)&&(isspace(_text[head]))) head++;
|
||||||
|
while ((tail > head)&&(isspace(_text[tail-1]))) tail--;
|
||||||
|
}
|
||||||
|
result = _text.substr(head, tail-head);
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
// Function: Shader::parse_upto
|
||||||
|
// Access: Public
|
||||||
|
// Description: Parse lines until you read a line that matches the
|
||||||
|
// specified pattern. Returns all the preceding lines,
|
||||||
|
// and if the include flag is set, returns the final
|
||||||
|
// line as well.
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
void Shader::
|
||||||
|
parse_upto(string &result, string pattern, bool include) {
|
||||||
|
int start = _parse;
|
||||||
|
int last = _parse;
|
||||||
|
while (true) {
|
||||||
|
string t;
|
||||||
|
parse_line(t, true, true);
|
||||||
|
if (t == pattern) break;
|
||||||
|
last = _parse;
|
||||||
|
}
|
||||||
|
if (include) {
|
||||||
|
result = _text.substr(start, _parse - start);
|
||||||
|
} else {
|
||||||
|
result = _text.substr(start, last - start);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
// Function: Shader::parse_rest
|
||||||
|
// Access: Public
|
||||||
|
// Description: Returns the rest of the text from the current
|
||||||
|
// parse location.
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
void Shader::
|
||||||
|
parse_rest(string &result) {
|
||||||
|
result = _text.substr(_parse, _text.size() - _parse);
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
// Function: Shader::parse_eof
|
||||||
|
// Access: Public
|
||||||
|
// Description: Returns true if the parse pointer is at the end of
|
||||||
|
// the shader.
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
bool Shader::
|
||||||
|
parse_eof(void) {
|
||||||
|
return _text.size() == _parse;
|
||||||
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////
|
||||||
// Function: Shader::arg_index
|
// Function: Shader::arg_index
|
||||||
// Access: Public
|
// Access: Public
|
||||||
|
@ -55,17 +55,25 @@ PUBLISHED:
|
|||||||
|
|
||||||
INLINE const string &get_text(void);
|
INLINE const string &get_text(void);
|
||||||
INLINE const Filename &get_file(void);
|
INLINE const Filename &get_file(void);
|
||||||
|
|
||||||
void prepare(PreparedGraphicsObjects *prepared_objects);
|
void prepare(PreparedGraphicsObjects *prepared_objects);
|
||||||
bool release(PreparedGraphicsObjects *prepared_objects);
|
bool release(PreparedGraphicsObjects *prepared_objects);
|
||||||
int release_all();
|
int release_all();
|
||||||
|
|
||||||
|
PUBLISHED:
|
||||||
|
void parse_init(void);
|
||||||
|
void parse_line(string &result, bool rt, bool lt);
|
||||||
|
void parse_upto(string &result, string pattern, bool include);
|
||||||
|
void parse_rest(string &result);
|
||||||
|
bool parse_eof(void);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
INLINE int arg_count(void);
|
INLINE int arg_count(void);
|
||||||
int arg_index(const string &id);
|
int arg_index(const string &id);
|
||||||
|
|
||||||
string _text;
|
string _text;
|
||||||
Filename _file;
|
Filename _file;
|
||||||
|
int _parse;
|
||||||
vector<string> _args;
|
vector<string> _args;
|
||||||
|
|
||||||
typedef pmap<PreparedGraphicsObjects *, ShaderContext *> Contexts;
|
typedef pmap<PreparedGraphicsObjects *, ShaderContext *> Contexts;
|
||||||
@ -80,6 +88,7 @@ public:
|
|||||||
GraphicsStateGuardianBase *gsg);
|
GraphicsStateGuardianBase *gsg);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
void parse(void);
|
||||||
void clear_prepared(PreparedGraphicsObjects *prepared_objects);
|
void clear_prepared(PreparedGraphicsObjects *prepared_objects);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user