Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(314)

Unified Diff: samples/o3d-webgl/effect.js

Issue 1092003: Fixed a lot of bugs with render surfaces and bitmaps. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/o3d/
Patch Set: '' Created 10 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « samples/o3d-webgl/draw_list.js ('k') | samples/o3d-webgl/pack.js » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: samples/o3d-webgl/effect.js
===================================================================
--- samples/o3d-webgl/effect.js (revision 41482)
+++ samples/o3d-webgl/effect.js (working copy)
@@ -124,11 +124,31 @@
o3d.Effect = function() {
o3d.ParamObject.call(this);
this.program_ = null;
+ this.uniforms_ = {};
+ this.attributes_ = {};
};
o3d.inherit('Effect', 'ParamObject');
/**
+ * An object mapping the names of uniform variables to objects containing
+ * information about the variable.
+ * @type {Object}
+ * @private
+ */
+o3d.Effect.prototype.uniforms_ = {};
+
+
+/**
+ * An object mapping the names of attributes to objects containing
+ * information about the attribute.
+ * @type {Object}
+ * @private
+ */
+o3d.Effect.prototype.attributes_ = {};
+
+
+/**
* Indicates whether the vertex shader has been loaded, so we can
* postpone linking until both shaders are in.
*
@@ -158,7 +178,8 @@
this.gl.bindAttribLocation(this.program_, i, attributes[i]);
}
this.gl.linkProgram(this.program_);
- this.getAllUniforms();
+ this.getUniforms_();
+ this.getAttributes_();
}
};
@@ -213,24 +234,58 @@
/**
+ * Loads a glsl vertex shader and pixel shader from one string.
+ * Assumes the vertex shader and pixel shader are separated by
+ * the text '// #o3d SplitMarker'.
+ * @param {string} shaderString The string.
+ */
+o3d.Effect.prototype.loadFromFXString =
+ function(shaderString) {
+ var splitIndex = shaderString.indexOf('// #o3d SplitMarker');
+ this.loadVertexShaderFromString(shaderString.substr(0, splitIndex));
+ this.loadPixelShaderFromString(shaderString.substr(splitIndex));
+};
+
+
+/**
* Iterates through the active uniforms of the program and gets the
* location of each one and stores them by name in the uniforms
* object.
+ * @private
*/
-o3d.Effect.prototype.getAllUniforms =
+o3d.Effect.prototype.getUniforms_ =
function() {
- this.uniforms = {};
+ this.uniforms_ = {};
var numUniforms = this.gl.getProgramParameter(
this.program_, this.gl.ACTIVE_UNIFORMS);
for (var i = 0; i < numUniforms; ++i) {
var info = this.gl.getActiveUniform(this.program_, i);
- this.uniforms[info.name] = {info:info,
+ this.uniforms_[info.name] = {info:info,
location:this.gl.getUniformLocation(this.program_, info.name)};
}
};
/**
+ * Iterates through the active uniforms of the program and gets the
+ * location of each one and stores them by name in the uniforms
+ * object.
+ * @private
+ */
+o3d.Effect.prototype.getAttributes_ =
+ function() {
+ this.attributes_ = {};
+ var numAttributes = this.gl.getProgramParameter(
+ this.program_, this.gl.ACTIVE_ATTRIBUTES);
+ for (var i = 0; i < numAttributes; ++i) {
+ var info = this.gl.getActiveAttrib(this.program_, i);
+ this.attributes_[info.name] = {info:info,
+ location:this.gl.getUniformLocation(this.program_, info.name)};
+ }
+};
+
+
+/**
* For each of the effect's uniform parameters, creates corresponding
* parameters on the given ParamObject. Skips SAS Parameters.
*
@@ -272,8 +327,8 @@
'worldProjectionInverseTranspose': true,
'worldViewProjectionInverseTranspose': true};
- for (name in this.uniforms) {
- var info = this.uniforms[name].info;
+ for (name in this.uniforms_) {
+ var info = this.uniforms_[name].info;
if (sasNames[name])
continue;
@@ -353,21 +408,28 @@
* EffectStreamInfo objects.
*/
o3d.Effect.prototype.getStreamInfo = function() {
- var r = [];
- // TODO(petersont): This is a stub, will remove later and replace with
- // something that actually gets its streams from the shader.
- var standard_semantic_index_pairs = [
- {semantic: o3d.Stream.POSITION, index: 0},
- {semantic: o3d.Stream.NORMAL, index: 0},
- {semantic: o3d.Stream.COLOR, index: 0},
- {semantic: o3d.Stream.TEXCOORD, index: 0}
- ];
+ var infoList = [];
- for (var i = 0; i < standard_semantic_index_pairs.length; ++i) {
- var p = standard_semantic_index_pairs[i];
- r.push(new o3d.EffectStreamInfo(p.semantic, p.index));
+ for (var name in this.attributes_) {
+ var attributes = {
+ 'position': {semantic: o3d.Stream.POSITION, index: 0},
+ 'normal': {semantic: o3d.Stream.NORMAL, index: 0},
+ 'tangent': {semantic: o3d.Stream.TANGENT, index: 0},
+ 'binormal': {semantic: o3d.Stream.BINORMAL, index: 0},
+ 'color': {semantic: o3d.Stream.COLOR, index: 0},
+ 'texCoord0': {semantic: o3d.Stream.TEXCOORD, index: 0},
+ 'texCoord1': {semantic: o3d.Stream.TEXCOORD, index: 1},
+ 'texCoord2': {semantic: o3d.Stream.TEXCOORD, index: 2},
+ 'texCoord3': {semantic: o3d.Stream.TEXCOORD, index: 3},
+ 'texCoord4': {semantic: o3d.Stream.TEXCOORD, index: 4},
+ 'texCoord5': {semantic: o3d.Stream.TEXCOORD, index: 5},
+ 'texCoord6': {semantic: o3d.Stream.TEXCOORD, index: 6},
+ 'texCoord7': {semantic: o3d.Stream.TEXCOORD, index: 7}};
+ var semantic_index_pair = attributes[name];
+ infoList.push(new o3d.EffectStreamInfo(
+ semantic_index_pair.semantic, semantic_index_pair.index));
}
- return r;
+ return infoList;
};
@@ -377,17 +439,19 @@
* the objects nearer the begining of the list.
*
* @param {!Array.<!o3d.ParamObject>} object_list The param objects to search.
+ * @private
*/
-o3d.Effect.prototype.searchForParams = function(object_list) {
+o3d.Effect.prototype.searchForParams_ = function(object_list) {
var filled_map = {};
- for (name in this.uniforms) {
+ for (name in this.uniforms_) {
filled_map[name] = false;
}
this.gl.useProgram(this.program_);
+ o3d.Param.texture_index_ = 0;
for (var i = 0; i < object_list.length; ++i) {
var obj = object_list[i];
- for (name in this.uniforms) {
- var uniformInfo = this.uniforms[name];
+ for (name in this.uniforms_) {
+ var uniformInfo = this.uniforms_[name];
if (filled_map[name]) {
continue;
}
@@ -399,7 +463,7 @@
}
}
- for (name in this.uniforms) {
+ for (name in this.uniforms_) {
if (!filled_map[name]) {
throw ('Uniform param not filled: '+name);
}
« no previous file with comments | « samples/o3d-webgl/draw_list.js ('k') | samples/o3d-webgl/pack.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698