/*
* Copyright 2013 Google Inc.
*
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
#ifndef GrGLProgramDesc_DEFINED
#define GrGLProgramDesc_DEFINED
#include "GrColor.h"
#include "GrProgramDesc.h"
#include "GrGpu.h"
#include "GrTypesPriv.h"
class GrGLGpu;
class GrGLProgramDescBuilder;
class GrGLProgramDesc : public GrProgramDesc {
friend class GrGLProgramDescBuilder;
};
/**
* This class can be used to build a GrProgramDesc. It also provides helpers for accessing
* GL specific info in the header.
*/
class GrGLProgramDescBuilder {
public:
typedef GrProgramDesc::KeyHeader KeyHeader;
// The key, stored in fKey, is composed of five parts(first 2 are defined in the key itself):
// 1. uint32_t for total key length.
// 2. uint32_t for a checksum.
// 3. Header struct defined above.
// 4. Backend-specific information including per-processor keys and their key lengths.
// Each processor's key is a variable length array of uint32_t.
enum {
// Part 3.
kHeaderOffset = GrGLProgramDesc::kHeaderOffset,
kHeaderSize = SkAlign4(sizeof(KeyHeader)),
// Part 4.
// This is the offset into the backenend specific part of the key, which includes
// per-processor keys.
kProcessorKeysOffset = kHeaderOffset + kHeaderSize,
};
/**
* Builds a GL specific program descriptor
*
* @param GrPrimitiveProcessor The geometry
* @param GrPipeline The optimized drawstate. The descriptor will represent a program
* which this optstate can use to draw with. The optstate contains
* general draw information, as well as the specific color, geometry,
* and coverage stages which will be used to generate the GL Program for
* this optstate.
* @param GrGLSLCaps Capabilities of the GLSL backend.
* @param GrProgramDesc The built and finalized descriptor
**/
static bool Build(GrProgramDesc*,
const GrPrimitiveProcessor&,
const GrPipeline&,
const GrGLSLCaps&);
};
#endif