blob: 2bf814f2d066f96312110eedd37e2d66b76cf96a [file] [log] [blame]
// Copyright (c) 2011 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 "gpu/tools/compositor_model_bench/forward_render_model.h"
#include <stddef.h>
#include <cstdlib>
#include <vector>
#include "base/notreached.h"
#include "gpu/tools/compositor_model_bench/render_model_utils.h"
using std::vector;
class ForwardRenderNodeVisitor : public RenderNodeVisitor {
public:
ForwardRenderNodeVisitor() {}
void BeginVisitRenderNode(RenderNode* v) override { NOTREACHED(); }
void BeginVisitCCNode(CCNode* v) override {
if (!v->drawsContent())
return;
ConfigAndActivateShaderForNode(v);
DrawQuad(v->width(), v->height());
}
void BeginVisitContentLayerNode(ContentLayerNode* l) override {
if (!l->drawsContent())
return;
ConfigAndActivateShaderForTiling(l);
// Now that we capture root layer tiles, a layer without tiles
// should not get drawn.
for (size_t n = 0; n < l->num_tiles(); ++n) {
const Tile* i = l->tile(n);
DrawTileQuad(i->texID, i->x, i->y);
}
}
};
ForwardRenderSimulator::ForwardRenderSimulator(std::unique_ptr<RenderNode> root,
int window_width,
int window_height)
: RenderModelSimulator(std::move(root)) {
textures_.reset(new TextureGenerator(root_.get()));
visitor_.reset(new ForwardRenderNodeVisitor());
glViewport(0, 0, window_width, window_height);
glDisable(GL_DEPTH_TEST);
glDisable(GL_CULL_FACE);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
}
ForwardRenderSimulator::~ForwardRenderSimulator() {
}
void ForwardRenderSimulator::Update() {
glClearColor(0, 0, 1, 1);
glColorMask(true, true, true, true);
glClear(GL_COLOR_BUFFER_BIT);
glColorMask(true, true, true, false);
BeginFrame();
root_->Accept(visitor_.get());
}
void ForwardRenderSimulator::Resize(int width, int height) {
glViewport(0, 0, width, height);
}