1// Copyright (c) 2011 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#include "gpu/tools/compositor_model_bench/forward_render_model.h" 6 7#include <cstdlib> 8#include <vector> 9 10#include "gpu/tools/compositor_model_bench/render_model_utils.h" 11 12using std::vector; 13 14class ForwardRenderNodeVisitor : public RenderNodeVisitor { 15 public: 16 ForwardRenderNodeVisitor() {} 17 18 virtual void BeginVisitRenderNode(RenderNode* v) OVERRIDE { 19 NOTREACHED(); 20 } 21 22 virtual void BeginVisitCCNode(CCNode* v) OVERRIDE { 23 if (!v->drawsContent()) 24 return; 25 ConfigAndActivateShaderForNode(v); 26 DrawQuad(v->width(), v->height()); 27 } 28 29 virtual void BeginVisitContentLayerNode(ContentLayerNode* l) OVERRIDE { 30 if (!l->drawsContent()) 31 return; 32 ConfigAndActivateShaderForTiling(l); 33 // Now that we capture root layer tiles, a layer without tiles 34 // should not get drawn. 35 for (size_t n = 0; n < l->num_tiles(); ++n) { 36 const Tile* i = l->tile(n); 37 DrawTileQuad(i->texID, i->x, i->y); 38 } 39 } 40}; 41 42ForwardRenderSimulator::ForwardRenderSimulator(RenderNode* root, 43 int window_width, 44 int window_height) 45 : RenderModelSimulator(root) { 46 textures_.reset(new TextureGenerator(root)); 47 visitor_.reset(new ForwardRenderNodeVisitor()); 48 glViewport(0, 0, window_width, window_height); 49 glDisable(GL_DEPTH_TEST); 50 glDisable(GL_CULL_FACE); 51 glEnable(GL_BLEND); 52 glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 53} 54 55ForwardRenderSimulator::~ForwardRenderSimulator() { 56} 57 58void ForwardRenderSimulator::Update() { 59 glClearColor(0, 0, 1, 1); 60 glColorMask(true, true, true, true); 61 glClear(GL_COLOR_BUFFER_BIT); 62 glColorMask(true, true, true, false); 63 BeginFrame(); 64 root_->Accept(visitor_.get()); 65} 66 67void ForwardRenderSimulator::Resize(int width, int height) { 68 glViewport(0, 0, width, height); 69} 70 71