Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Vertex attributes cleanup #610

Merged
merged 1 commit into from Dec 1, 2016
Merged
Changes from all commits
Commits
File filter...
Filter file types
Jump to…
Jump to file
Failed to load files.

Always

Just for now

@@ -2,6 +2,8 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */

varying vec4 vColor;

void main(void)
{
oFragColor = vColor;
@@ -2,9 +2,12 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */

in vec4 aColor;
varying vec4 vColor;

void main(void)
{
vColor = aColorRectTL;
vColor = aColor;
vec4 pos = vec4(aPosition, 1.0);
pos.xy = floor(pos.xy * uDevicePixelRatio + 0.5) / uDevicePixelRatio;
gl_Position = uTransform * pos;
@@ -2,6 +2,9 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */

varying vec2 vColorTexCoord;
varying vec4 vColor;

void main(void)
{
#ifdef SERVO_ES2
@@ -2,10 +2,16 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */

in vec4 aColor;
in vec4 aColorTexCoord;

varying vec2 vColorTexCoord;
varying vec4 vColor;

void main(void)
{
vColor = aColorRectTL;
vColorTexCoord = aColorTexCoordRectTop.xy;
vColor = aColor;
vColorTexCoord = aColorTexCoord.xy;
vec4 pos = vec4(aPosition, 1.0);
pos.xy = floor(pos.xy * uDevicePixelRatio + 0.5) / uDevicePixelRatio;
gl_Position = uTransform * pos;
@@ -6,44 +6,18 @@
// Vertex shader attributes and uniforms
//======================================================================================
#ifdef WR_VERTEX_SHADER
in vec4 aColorTexCoordRectTop;
in vec4 aColorRectTL;

// box-shadow
in vec4 aBorderPosition;
in vec4 aBorderRadii;
in float aBlurRadius;

// blur
in vec2 aDestTextureSize;
in vec2 aSourceTextureSize;
#endif

//======================================================================================
// Fragment shader attributes and uniforms
//======================================================================================
#ifdef WR_FRAGMENT_SHADER
uniform vec2 uDirection;
#endif

//======================================================================================
// Interpolator definitions
//======================================================================================

// Hacks to be removed (needed for text etc)
varying vec2 vColorTexCoord;
varying vec4 vColor;

// box_shadow
varying vec2 vPosition;
varying vec4 vBorderPosition;
varying vec4 vBorderRadii;
varying float vBlurRadius;

// blur
varying vec2 vSourceTextureSize;
varying vec2 vDestTextureSize;

//======================================================================================
// VS only types and UBOs
//======================================================================================
@@ -56,9 +30,4 @@ varying vec2 vDestTextureSize;
// FS only functions
//======================================================================================
#ifdef WR_FRAGMENT_SHADER

void SetFragColor(vec4 color) {
oFragColor = color;
}

#endif
@@ -5,8 +5,7 @@
use euclid::Matrix4D;
use fnv::FnvHasher;
use gleam::gl;
use internal_types::{PackedVertex, PackedVertexForQuad};
use internal_types::{RenderTargetMode, TextureSampler};
use internal_types::{PackedVertex, RenderTargetMode, TextureSampler};
use internal_types::{VertexAttribute, DebugFontVertex, DebugColorVertex, DEFAULT_TEXTURE};
//use notify::{self, Watcher};
use super::shader_source;
@@ -97,11 +96,12 @@ impl VertexFormat {
match *self {
VertexFormat::DebugFont => {
gl::enable_vertex_attrib_array(VertexAttribute::Position as gl::GLuint);
gl::enable_vertex_attrib_array(VertexAttribute::ColorRectTL as gl::GLuint);
gl::enable_vertex_attrib_array(VertexAttribute::ColorTexCoordRectTop as
gl::GLuint);
gl::enable_vertex_attrib_array(VertexAttribute::Color as gl::GLuint);
gl::enable_vertex_attrib_array(VertexAttribute::ColorTexCoord as gl::GLuint);

self.set_divisors(0);
gl::vertex_attrib_divisor(VertexAttribute::Position as gl::GLuint, 0);
gl::vertex_attrib_divisor(VertexAttribute::Color as gl::GLuint, 0);
gl::vertex_attrib_divisor(VertexAttribute::ColorTexCoord as gl::GLuint, 0);

let vertex_stride = mem::size_of::<DebugFontVertex>() as gl::GLuint;

@@ -111,13 +111,13 @@ impl VertexFormat {
false,
vertex_stride as gl::GLint,
0 + vertex_stride * offset);
gl::vertex_attrib_pointer(VertexAttribute::ColorRectTL as gl::GLuint,
gl::vertex_attrib_pointer(VertexAttribute::Color as gl::GLuint,
4,
gl::UNSIGNED_BYTE,
true,
vertex_stride as gl::GLint,
8 + vertex_stride * offset);
gl::vertex_attrib_pointer(VertexAttribute::ColorTexCoordRectTop as gl::GLuint,
gl::vertex_attrib_pointer(VertexAttribute::ColorTexCoord as gl::GLuint,
2,
gl::FLOAT,
false,
@@ -126,9 +126,10 @@ impl VertexFormat {
}
VertexFormat::DebugColor => {
gl::enable_vertex_attrib_array(VertexAttribute::Position as gl::GLuint);
gl::enable_vertex_attrib_array(VertexAttribute::ColorRectTL as gl::GLuint);
gl::enable_vertex_attrib_array(VertexAttribute::Color as gl::GLuint);

self.set_divisors(0);
gl::vertex_attrib_divisor(VertexAttribute::Position as gl::GLuint, 0);
gl::vertex_attrib_divisor(VertexAttribute::Color as gl::GLuint, 0);

let vertex_stride = mem::size_of::<DebugColorVertex>() as gl::GLuint;

@@ -138,15 +139,17 @@ impl VertexFormat {
false,
vertex_stride as gl::GLint,
0 + vertex_stride * offset);
gl::vertex_attrib_pointer(VertexAttribute::ColorRectTL as gl::GLuint,
gl::vertex_attrib_pointer(VertexAttribute::Color as gl::GLuint,
4,
gl::UNSIGNED_BYTE,
true,
vertex_stride as gl::GLint,
8 + vertex_stride * offset);
}
VertexFormat::Rectangles => {
VertexFormat::Rectangles |
VertexFormat::Triangles => {
gl::enable_vertex_attrib_array(VertexAttribute::Position as gl::GLuint);
gl::vertex_attrib_divisor(VertexAttribute::Position as gl::GLuint, 0);

let vertex_stride = mem::size_of::<PackedVertex>() as gl::GLuint;

@@ -157,116 +160,12 @@ impl VertexFormat {
vertex_stride as gl::GLint,
0);

aux.as_ref().unwrap().bind();

gl::enable_vertex_attrib_array(VertexAttribute::PositionRect as gl::GLuint);
gl::enable_vertex_attrib_array(VertexAttribute::ColorRectTL as gl::GLuint);
gl::enable_vertex_attrib_array(VertexAttribute::ColorRectTR as gl::GLuint);
gl::enable_vertex_attrib_array(VertexAttribute::ColorRectBR as gl::GLuint);
gl::enable_vertex_attrib_array(VertexAttribute::ColorRectBL as gl::GLuint);
gl::enable_vertex_attrib_array(VertexAttribute::ColorTexCoordRectTop as
gl::GLuint);
gl::enable_vertex_attrib_array(VertexAttribute::ColorTexCoordRectBottom as
gl::GLuint);
gl::enable_vertex_attrib_array(VertexAttribute::MaskTexCoordRectTop as gl::GLuint);
gl::enable_vertex_attrib_array(VertexAttribute::MaskTexCoordRectBottom as
gl::GLuint);
gl::enable_vertex_attrib_array(VertexAttribute::Misc as gl::GLuint);

self.set_divisors(1);

let vertex_stride = mem::size_of::<PackedVertexForQuad>() as gl::GLuint;

gl::vertex_attrib_pointer(VertexAttribute::PositionRect as gl::GLuint,
4,
gl::FLOAT,
false,
vertex_stride as gl::GLint,
0 + vertex_stride * offset);
gl::vertex_attrib_pointer(VertexAttribute::ColorRectTL as gl::GLuint,
4,
gl::UNSIGNED_BYTE,
false,
vertex_stride as gl::GLint,
16 + vertex_stride * offset);
gl::vertex_attrib_pointer(VertexAttribute::ColorRectTR as gl::GLuint,
4,
gl::UNSIGNED_BYTE,
false,
vertex_stride as gl::GLint,
20 + vertex_stride * offset);
gl::vertex_attrib_pointer(VertexAttribute::ColorRectBR as gl::GLuint,
4,
gl::UNSIGNED_BYTE,
false,
vertex_stride as gl::GLint,
24 + vertex_stride * offset);
gl::vertex_attrib_pointer(VertexAttribute::ColorRectBL as gl::GLuint,
4,
gl::UNSIGNED_BYTE,
false,
vertex_stride as gl::GLint,
28 + vertex_stride * offset);
gl::vertex_attrib_pointer(VertexAttribute::ColorTexCoordRectTop as gl::GLuint,
4,
gl::FLOAT,
false,
vertex_stride as gl::GLint,
32 + vertex_stride * offset);
gl::vertex_attrib_pointer(VertexAttribute::ColorTexCoordRectBottom as gl::GLuint,
4,
gl::FLOAT,
false,
vertex_stride as gl::GLint,
48 + vertex_stride * offset);
gl::vertex_attrib_pointer(VertexAttribute::MaskTexCoordRectTop as gl::GLuint,
4,
gl::UNSIGNED_SHORT,
false,
vertex_stride as gl::GLint,
64 + vertex_stride * offset);
gl::vertex_attrib_pointer(VertexAttribute::MaskTexCoordRectBottom as gl::GLuint,
4,
gl::UNSIGNED_SHORT,
false,
vertex_stride as gl::GLint,
72 + vertex_stride * offset);
gl::vertex_attrib_pointer(VertexAttribute::Misc as gl::GLuint,
4,
gl::UNSIGNED_BYTE,
false,
vertex_stride as gl::GLint,
80 + vertex_stride * offset);
}
VertexFormat::Triangles => {
gl::enable_vertex_attrib_array(VertexAttribute::Position as gl::GLuint);

self.set_divisors(0);

let vertex_stride = mem::size_of::<PackedVertex>() as gl::GLuint;

gl::vertex_attrib_pointer(VertexAttribute::Position as gl::GLuint,
2,
gl::FLOAT,
false,
vertex_stride as gl::GLint,
0 + vertex_stride * offset);
if let Some(ref aux_format) = aux {
aux_format.bind();
}
}
}
}

fn set_divisors(&self, divisor: u32) {
gl::vertex_attrib_divisor(VertexAttribute::PositionRect as gl::GLuint, divisor);
gl::vertex_attrib_divisor(VertexAttribute::ColorRectTL as gl::GLuint, divisor);
gl::vertex_attrib_divisor(VertexAttribute::ColorRectTR as gl::GLuint, divisor);
gl::vertex_attrib_divisor(VertexAttribute::ColorRectBR as gl::GLuint, divisor);
gl::vertex_attrib_divisor(VertexAttribute::ColorRectBL as gl::GLuint, divisor);
gl::vertex_attrib_divisor(VertexAttribute::ColorTexCoordRectTop as gl::GLuint, divisor);
gl::vertex_attrib_divisor(VertexAttribute::ColorTexCoordRectBottom as gl::GLuint, divisor);
gl::vertex_attrib_divisor(VertexAttribute::MaskTexCoordRectTop as gl::GLuint, divisor);
gl::vertex_attrib_divisor(VertexAttribute::MaskTexCoordRectBottom as gl::GLuint, divisor);
gl::vertex_attrib_divisor(VertexAttribute::Misc as gl::GLuint, divisor);
}
}

impl TextureId {
@@ -362,49 +261,8 @@ impl Program {
gl::attach_shader(self.id, fs_id);

gl::bind_attrib_location(self.id, VertexAttribute::Position as gl::GLuint, "aPosition");
gl::bind_attrib_location(self.id,
VertexAttribute::PositionRect as gl::GLuint,
"aPositionRect");
gl::bind_attrib_location(self.id,
VertexAttribute::ColorRectTL as gl::GLuint,
"aColorRectTL");
gl::bind_attrib_location(self.id,
VertexAttribute::ColorRectTR as gl::GLuint,
"aColorRectTR");
gl::bind_attrib_location(self.id,
VertexAttribute::ColorRectBR as gl::GLuint,
"aColorRectBR");
gl::bind_attrib_location(self.id,
VertexAttribute::ColorRectBL as gl::GLuint,
"aColorRectBL");
gl::bind_attrib_location(self.id,
VertexAttribute::ColorTexCoordRectTop as gl::GLuint,
"aColorTexCoordRectTop");
gl::bind_attrib_location(self.id,
VertexAttribute::MaskTexCoordRectTop as gl::GLuint,
"aMaskTexCoordRectTop");
gl::bind_attrib_location(self.id,
VertexAttribute::ColorTexCoordRectBottom as gl::GLuint,
"aColorTexCoordRectBottom");
gl::bind_attrib_location(self.id,
VertexAttribute::MaskTexCoordRectBottom as gl::GLuint,
"aMaskTexCoordRectBottom");
gl::bind_attrib_location(self.id,
VertexAttribute::BorderRadii as gl::GLuint,
"aBorderRadii");
gl::bind_attrib_location(self.id,
VertexAttribute::BorderPosition as gl::GLuint,
"aBorderPosition");
gl::bind_attrib_location(self.id,
VertexAttribute::BlurRadius as gl::GLuint,
"aBlurRadius");
gl::bind_attrib_location(self.id,
VertexAttribute::DestTextureSize as gl::GLuint,
"aDestTextureSize");
gl::bind_attrib_location(self.id,
VertexAttribute::SourceTextureSize as gl::GLuint,
"aSourceTextureSize");
gl::bind_attrib_location(self.id, VertexAttribute::Misc as gl::GLuint, "aMisc");
gl::bind_attrib_location(self.id, VertexAttribute::Color as gl::GLuint, "aColor");
gl::bind_attrib_location(self.id, VertexAttribute::ColorTexCoord as gl::GLuint, "aColorTexCoord");

gl::link_program(self.id);
if gl::get_program_iv(self.id, gl::LINK_STATUS) == (0 as gl::GLint) {
@@ -1272,7 +1130,7 @@ impl Device {

if let Some(shared_src) = get_optional_shader_source(base_filename, &self.resource_override_path) {
include.push_str(&shared_src);
}
}

let program = Program {
name: base_filename.to_owned(),
@@ -1631,13 +1489,8 @@ impl Device {

let buffer_ids = gl::gen_buffers(2);
let ibo_id = IBOId(buffer_ids[0]);
let (main_vbo_id, aux_vbo_id) = if format == VertexFormat::Rectangles {
(quad_vertex_buffer.expect("A quad vertex buffer must be supplied to `create_vao()` if
we are to render rectangles!"),
Some(VBOId(buffer_ids[1])))
} else {
(VBOId(buffer_ids[1]), None)
};
let main_vbo_id = VBOId(buffer_ids[1]);
let aux_vbo_id = quad_vertex_buffer;

self.create_vao_with_vbos(format, main_vbo_id, aux_vbo_id, ibo_id, 0, true)
}
ProTip! Use n and p to navigate between commits in a pull request.
You can’t perform that action at this time.