Hash :
a20af6d7
Author :
Date :
2017-09-18T13:32:29
Use C++11 raw string literals instead of SHADER_SOURCE macro This is better in many ways: 1. It doesn't confuse clang format 2. \n doesn't need to be included after preprocessor directives like the version directive. 3. It's using built-in functionality instead of something custom. Raw string literals should be the preferred way to include shader source in C++ files going forward. BUG=angleproject:2157 TEST=angle_end2end_tests Change-Id: I8b236a6e2d5c25d920297e5bc5b5b143eddeba1f Reviewed-on: https://chromium-review.googlesource.com/671046 Reviewed-by: Corentin Wallez <cwallez@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136
//
// Copyright (c) 2017 The ANGLE Project Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
//
// draw_call_perf_utils.cpp:
// Common utilities for performance tests that need to do a large amount of draw calls.
//
#include "draw_call_perf_utils.h"
#include <vector>
#include "shader_utils.h"
namespace
{
const char *SimpleScaleAndOffsetVertexShaderSource()
{
return
R"(attribute vec2 vPosition;
uniform float uScale;
uniform float uOffset;
void main()
{
gl_Position = vec4(vPosition * vec2(uScale) + vec2(uOffset), 0, 1);
})";
}
const char *SimpleDrawVertexShaderSource()
{
return
R"(attribute vec2 vPosition;
const float scale = 0.5;
const float offset = -0.5;
void main()
{
gl_Position = vec4(vPosition * vec2(scale) + vec2(offset), 0, 1);
})";
}
const char *SimpleFragmentShaderSource()
{
return
R"(precision mediump float;
void main()
{
gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);
})";
}
void Generate2DTriangleData(size_t numTris, std::vector<float> *floatData)
{
for (size_t triIndex = 0; triIndex < numTris; ++triIndex)
{
floatData->push_back(1.0f);
floatData->push_back(2.0f);
floatData->push_back(0.0f);
floatData->push_back(0.0f);
floatData->push_back(2.0f);
floatData->push_back(0.0f);
}
}
} // anonymous namespace
GLuint SetupSimpleScaleAndOffsetProgram()
{
const std::string vs = SimpleScaleAndOffsetVertexShaderSource();
const std::string fs = SimpleFragmentShaderSource();
GLuint program = CompileProgram(vs, fs);
if (program == 0u)
{
return program;
}
// Use the program object
glUseProgram(program);
GLfloat scale = 0.5f;
GLfloat offset = -0.5f;
glUniform1f(glGetUniformLocation(program, "uScale"), scale);
glUniform1f(glGetUniformLocation(program, "uOffset"), offset);
return program;
}
GLuint SetupSimpleDrawProgram()
{
const std::string vs = SimpleDrawVertexShaderSource();
const std::string fs = SimpleFragmentShaderSource();
GLuint program = CompileProgram(vs, fs);
if (program == 0u)
{
return program;
}
// Use the program object
glUseProgram(program);
return program;
}
GLuint Create2DTriangleBuffer(size_t numTris, GLenum usage)
{
GLuint buffer = 0u;
glGenBuffers(1, &buffer);
glBindBuffer(GL_ARRAY_BUFFER, buffer);
std::vector<GLfloat> floatData;
Generate2DTriangleData(numTris, &floatData);
// To avoid generating GL errors when testing validation-only with zero triangles.
if (floatData.empty())
{
floatData.push_back(0.0f);
}
glBufferData(GL_ARRAY_BUFFER, floatData.size() * sizeof(GLfloat), &floatData[0], usage);
return buffer;
}
void CreateColorFBO(GLsizei width, GLsizei height, GLuint *fbo, GLuint *texture)
{
glGenFramebuffers(1, fbo);
glBindFramebuffer(GL_FRAMEBUFFER, *fbo);
glGenTextures(1, texture);
glBindTexture(GL_TEXTURE_2D, *texture);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, nullptr);
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, *texture, 0);
}