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

Unified Diff: remoting/client/ios/display/gl_demo_screen.mm

Issue 2555803002: Adding the iOS app and integration example with GlRenderer. (Closed)
Patch Set: cleaning up includes. Created 3 years, 11 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
Index: remoting/client/ios/display/gl_demo_screen.mm
diff --git a/remoting/client/ios/display/gl_demo_screen.mm b/remoting/client/ios/display/gl_demo_screen.mm
new file mode 100644
index 0000000000000000000000000000000000000000..db549817b73e4d2bb5170b8094fabd112af36733
--- /dev/null
+++ b/remoting/client/ios/display/gl_demo_screen.mm
@@ -0,0 +1,115 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "remoting/client/ios/display/gl_demo_screen.h"
+
+#include "base/logging.h"
+#include "remoting/client/display/canvas.h"
+#include "remoting/client/display/gl_math.h"
+
+namespace remoting {
+
+namespace {
+
+const GLfloat square[] = {-1.0, -1.0, 1.0, -1.0, -1.0, 1.0, 1.0, 1.0};
Sergey Ulanov 2017/01/27 19:47:44 This should be kSquare (or kSquareCoordinates). Sa
+
+const GLchar* fragmentShaderSource =
+ "precision mediump float;"
+ "void main() {"
+ " gl_FragColor = vec4(1.0, 1.0, 0.0, 1.0);"
+ "} ";
+
+const GLchar* vertexShaderSource =
+ "precision mediump float;"
+ "attribute vec4 a_position;"
+ "void main() {"
+ " gl_Position = a_position;"
+ "}";
+
+const GLchar* a_position = "a_position";
Sergey Ulanov 2017/01/27 19:47:44 kPositionAttributeName
+
+} // namespace
+
+// This is a demo screen that can be added to the renderer to test the drawable
+// integration. This will draw an expanding checkerboard pattern to the screen.
+GlDemoScreen::GlDemoScreen() : weak_factory_(this) {}
+
+GlDemoScreen::~GlDemoScreen() {}
+
+void GlDemoScreen::SetCanvas(base::WeakPtr<Canvas> canvas) {
+ canvas_ = canvas;
+
+ // Create and compile vertex shader.
+ GLuint vertexShader = glCreateShader(GL_VERTEX_SHADER);
+ glShaderSource(vertexShader, 1, &vertexShaderSource, NULL);
+ glCompileShader(vertexShader);
+
+ // Create and compile fragment shader.
+ GLuint fragmentShader = glCreateShader(GL_FRAGMENT_SHADER);
+ glShaderSource(fragmentShader, 1, &fragmentShaderSource, NULL);
+ glCompileShader(fragmentShader);
+
+ // Create and link program.
+ program_ = glCreateProgram();
+ glAttachShader(program_, vertexShader);
+ glAttachShader(program_, fragmentShader);
+ glLinkProgram(program_);
+}
+
+int GlDemoScreen::GetZIndex() {
+ return Drawable::DESKTOP + 1;
+}
+
+bool GlDemoScreen::Draw() {
+ if (!canvas_) {
+ return false;
+ }
+
+ // TODO(nicholss): width and height should be dynamic based on the canvas.
+ int width = 640;
+ int height = 1024;
+ square_size_++;
+ if (square_size_ > 300) {
+ square_size_ = 1;
+ }
+
+ // Set the viewport.
+ glViewport(0, 0, width, height);
+
+ // Clear.
+ glClearColor(0, 1, 0, 1);
+ glClear(GL_COLOR_BUFFER_BIT);
+
+ // Use program.
+ glUseProgram(program_);
+
+ int skip = 0;
+ for (int i = 0; i < width; i += square_size_) {
+ if (skip == square_size_) {
Sergey Ulanov 2017/01/27 19:47:44 This whole statement can be written as follows. s
+ skip = 0;
+ } else {
+ skip = square_size_;
+ }
+ for (int j = skip; j < height; j += square_size_ * 2) {
+ glViewport(i, j, square_size_, square_size_);
+
+ // Send geometry to vertex shader.
+ GLuint aPosition = glGetAttribLocation(program_, a_position);
+
+ glVertexAttribPointer(aPosition, 2, GL_FLOAT, GL_FALSE, 0, square);
+ glEnableVertexAttribArray(aPosition);
+
+ // Draw.
+ glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
+ }
+ }
+ return true;
+}
+
+base::WeakPtr<Drawable> GlDemoScreen::GetWeakPtr() {
+ DCHECK(thread_checker_.CalledOnValidThread());
+ return weak_factory_.GetWeakPtr();
+}
+
+} // namespace remoting

Powered by Google App Engine
This is Rietveld 408576698