mirror of
https://github.com/servo/servo.git
synced 2025-08-02 12:10:29 +01:00
Implement WebGLRenderingContext.getActiveUniform()
This commit is contained in:
parent
a9eb08dbaa
commit
56eef10718
7 changed files with 84 additions and 43 deletions
|
@ -8,7 +8,8 @@ use dom::bindings::codegen::Bindings::WebGLProgramBinding;
|
|||
use dom::bindings::codegen::Bindings::WebGLRenderingContextBinding::WebGLRenderingContextConstants as constants;
|
||||
use dom::bindings::global::GlobalRef;
|
||||
use dom::bindings::js::{JS, MutNullableHeap, Root};
|
||||
use dom::bindings::reflector::reflect_dom_object;
|
||||
use dom::bindings::reflector::{Reflectable, reflect_dom_object};
|
||||
use dom::webglactiveinfo::WebGLActiveInfo;
|
||||
use dom::webglobject::WebGLObject;
|
||||
use dom::webglrenderingcontext::MAX_UNIFORM_AND_ATTRIBUTE_LEN;
|
||||
use dom::webglshader::WebGLShader;
|
||||
|
@ -156,6 +157,16 @@ impl WebGLProgram {
|
|||
Ok(())
|
||||
}
|
||||
|
||||
pub fn get_active_uniform(&self, index: u32) -> WebGLResult<Root<WebGLActiveInfo>> {
|
||||
let (sender, receiver) = ipc::channel().unwrap();
|
||||
self.renderer
|
||||
.send(CanvasMsg::WebGL(WebGLCommand::GetActiveUniform(self.id, index, sender)))
|
||||
.unwrap();
|
||||
|
||||
receiver.recv().unwrap().map(|(size, ty, name)|
|
||||
WebGLActiveInfo::new(self.global().r(), size, ty, DOMString::from(name)))
|
||||
}
|
||||
|
||||
/// glGetAttribLocation
|
||||
pub fn get_attrib_location(&self, name: DOMString) -> WebGLResult<Option<i32>> {
|
||||
if name.len() > MAX_UNIFORM_AND_ATTRIBUTE_LEN {
|
||||
|
|
|
@ -16,6 +16,7 @@ use dom::event::{Event, EventBubbles, EventCancelable};
|
|||
use dom::htmlcanvaselement::HTMLCanvasElement;
|
||||
use dom::htmlcanvaselement::utils as canvas_utils;
|
||||
use dom::node::{Node, NodeDamage, window_from_node};
|
||||
use dom::webglactiveinfo::WebGLActiveInfo;
|
||||
use dom::webglbuffer::WebGLBuffer;
|
||||
use dom::webglcontextevent::WebGLContextEvent;
|
||||
use dom::webglframebuffer::WebGLFramebuffer;
|
||||
|
@ -794,6 +795,17 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext {
|
|||
.unwrap()
|
||||
}
|
||||
|
||||
// https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.10
|
||||
fn GetActiveUniform(&self, program: Option<&WebGLProgram>, index: u32) -> Option<Root<WebGLActiveInfo>> {
|
||||
program.and_then(|p| match p.get_active_uniform(index) {
|
||||
Ok(ret) => Some(ret),
|
||||
Err(error) => {
|
||||
self.webgl_error(error);
|
||||
None
|
||||
},
|
||||
})
|
||||
}
|
||||
|
||||
// https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.10
|
||||
fn GetAttribLocation(&self, program: Option<&WebGLProgram>, name: DOMString) -> i32 {
|
||||
if let Some(program) = program {
|
||||
|
|
|
@ -568,7 +568,7 @@ interface WebGLRenderingContextBase
|
|||
void generateMipmap(GLenum target);
|
||||
|
||||
//WebGLActiveInfo? getActiveAttrib(WebGLProgram? program, GLuint index);
|
||||
//WebGLActiveInfo? getActiveUniform(WebGLProgram? program, GLuint index);
|
||||
WebGLActiveInfo? getActiveUniform(WebGLProgram? program, GLuint index);
|
||||
//sequence<WebGLShader>? getAttachedShaders(WebGLProgram? program);
|
||||
|
||||
[WebGLHandlesContextLoss] GLint getAttribLocation(WebGLProgram? program, DOMString name);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue