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

Side by Side Diff: cc/output/shader.cc

Issue 2121043002: 16 bpp video stream capture, render and WebGL usage - Realsense R200 & SR300 support. Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: bilinear filter for rg88, float and half float added. Created 4 years, 5 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 unified diff | Download patch
OLDNEW
1 // Copyright 2011 The Chromium Authors. All rights reserved. 1 // Copyright 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "cc/output/shader.h" 5 #include "cc/output/shader.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include <algorithm> 9 #include <algorithm>
10 10
(...skipping 2110 matching lines...) Expand 10 before | Expand all | Expand 10 after
2121 }); 2121 });
2122 } else { 2122 } else {
2123 get_alpha = SHADER0([]() { 2123 get_alpha = SHADER0([]() {
2124 float GetAlpha(vec2 ya_clamped) { return alpha; } 2124 float GetAlpha(vec2 ya_clamped) { return alpha; }
2125 }); 2125 });
2126 } 2126 }
2127 2127
2128 return FRAGMENT_SHADER(head, get_uv + get_alpha + main); 2128 return FRAGMENT_SHADER(head, get_uv + get_alpha + main);
2129 } 2129 }
2130 2130
2131 FragmentShaderYVideo::FragmentShaderYVideo()
2132 : FragmentTexOpaqueBinding(),
2133 x_derivative_location_(-1),
2134 y_derivative_location_(-1) {}
2135
2136 void FragmentShaderYVideo::Init(GLES2Interface* context,
2137 unsigned program,
2138 int* base_uniform_index) {
2139 FragmentTexOpaqueBinding::Init(context, program, base_uniform_index);
2140
2141 static const char* uniforms[] = {"x_derivative", "y_derivative"};
2142 int locations[arraysize(uniforms)];
2143
2144 GetProgramUniformLocations(context, program, arraysize(uniforms), uniforms,
2145 locations, base_uniform_index);
2146 x_derivative_location_ = locations[0];
2147 y_derivative_location_ = locations[1];
2148 }
2149
2150 std::string FragmentShaderYVideo::GetShaderString(TexCoordPrecision precision,
2151 SamplerType sampler) const {
2152 return FRAGMENT_SHADER(GetShaderHead(), GetShaderBody());
2153 }
2154
2155 std::string FragmentShaderYVideo::GetShaderHead() {
2156 return SHADER0([]() {
2157 precision mediump float;
2158 varying TexCoordPrecision vec2 v_texCoord;
2159 uniform SamplerType s_texture;
2160 uniform float x_derivative;
2161 uniform float y_derivative;
2162 });
2163 }
2164
2165 std::string FragmentShaderYVideo::GetShaderBody() {
2166 return SHADER0([]() {
2167 vec4 TextureLookupBilinear(sampler2D sampler, highp vec2 texCoord) {
aleksandar.stojiljkovic 2016/07/15 12:29:06 custom bilinear filter used for RG88.
2168 vec4 s1 = texture2D(sampler, texCoord);
2169 vec4 s2 = texture2D(sampler, texCoord + vec2(x_derivative, 0.));
2170 vec4 s3 = texture2D(sampler, texCoord + vec2(0., y_derivative));
2171 vec4 s4 = texture2D(sampler, texCoord + vec2(x_derivative, y_derivative));
2172 vec2 f = fract(texCoord.xy / vec2(x_derivative, y_derivative));
2173 return mix(mix(s1, s2, f.x), mix(s3, s4, f.x), f.y);
2174 }
2175 void main() {
2176 gl_FragColor =
2177 vec4(vec3(TextureLookupBilinear(s_texture, v_texCoord).g), 1.);
2178 }
2179 });
2180 }
2181
2131 FragmentShaderColor::FragmentShaderColor() : color_location_(-1) { 2182 FragmentShaderColor::FragmentShaderColor() : color_location_(-1) {
2132 } 2183 }
2133 2184
2134 void FragmentShaderColor::Init(GLES2Interface* context, 2185 void FragmentShaderColor::Init(GLES2Interface* context,
2135 unsigned program, 2186 unsigned program,
2136 int* base_uniform_index) { 2187 int* base_uniform_index) {
2137 static const char* uniforms[] = { 2188 static const char* uniforms[] = {
2138 "color", 2189 "color",
2139 }; 2190 };
2140 int locations[arraysize(uniforms)]; 2191 int locations[arraysize(uniforms)];
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
2204 void main() { 2255 void main() {
2205 vec4 d4 = min(edge_dist[0], edge_dist[1]); 2256 vec4 d4 = min(edge_dist[0], edge_dist[1]);
2206 vec2 d2 = min(d4.xz, d4.yw); 2257 vec2 d2 = min(d4.xz, d4.yw);
2207 float aa = clamp(gl_FragCoord.w * min(d2.x, d2.y), 0.0, 1.0); 2258 float aa = clamp(gl_FragCoord.w * min(d2.x, d2.y), 0.0, 1.0);
2208 gl_FragColor = color * aa; 2259 gl_FragColor = color * aa;
2209 } 2260 }
2210 }); 2261 });
2211 } 2262 }
2212 2263
2213 } // namespace cc 2264 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698