OpenSubdiv/examples/glBatchViewer/delegate.h

78 lines
2.4 KiB
C
Raw Normal View History

2013-05-10 02:18:32 +00:00
//
2013-07-18 21:19:50 +00:00
// Copyright 2013 Pixar
2013-05-10 02:18:32 +00:00
//
2013-07-18 21:19:50 +00:00
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License
// and the following modification to it: Section 6 Trademarks.
// deleted and replaced with:
2013-05-10 02:18:32 +00:00
//
2013-07-18 21:19:50 +00:00
// 6. Trademarks. This License does not grant permission to use the
// trade names, trademarks, service marks, or product names of the
// Licensor and its affiliates, except as required for reproducing
// the content of the NOTICE file.
2013-05-10 02:18:32 +00:00
//
2013-07-18 21:19:50 +00:00
// You may obtain a copy of the License at
2013-05-10 02:18:32 +00:00
//
2013-07-18 21:19:50 +00:00
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing,
// software distributed under the License is distributed on an
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
// either express or implied. See the License for the specific
// language governing permissions and limitations under the
// License.
2013-05-10 02:18:32 +00:00
//
#ifndef DELEGATE_H
#define DELEGATE_H
#include <osd/cpuGLVertexBuffer.h>
#include <osd/glDrawContext.h>
#include <osd/glDrawRegistry.h>
#include <osdutil/batch.h>
2013-05-10 02:18:32 +00:00
#include "effect.h"
#include "effectRegistry.h"
class MyDrawContext : public OpenSubdiv::OsdGLDrawContext {
public:
virtual ~MyDrawContext();
static MyDrawContext *Create(OpenSubdiv::FarPatchTables const *patchTables,
bool requireFVarData=false);
GLuint GetVertexArray() const { return _vao; }
2013-05-10 02:18:32 +00:00
private:
MyDrawContext();
GLuint _vao;
2013-05-10 02:18:32 +00:00
};
class MyDrawDelegate {
public:
typedef MyEffect * EffectHandle;
void Bind(OpenSubdiv::OsdUtilMeshBatchBase<MyDrawContext> *batch, EffectHandle const &effect);
void Unbind(OpenSubdiv::OsdUtilMeshBatchBase<MyDrawContext> *batch, EffectHandle const &effect);
void Begin();
void End();
void DrawElements(OpenSubdiv::OsdDrawContext::PatchArray const &patchArray);
bool IsCombinable(EffectHandle const &a, EffectHandle const &b) const;
2013-05-10 02:18:32 +00:00
void ResetNumDrawCalls() { _numDrawCalls = 0; }
int GetNumDrawCalls() const { return _numDrawCalls; }
private:
MyDrawConfig *GetDrawConfig(EffectHandle &effect, OpenSubdiv::OsdDrawContext::PatchDescriptor desc);
2013-05-10 02:18:32 +00:00
MyEffectRegistry _effectRegistry;
int _numDrawCalls;
OpenSubdiv::OsdUtilMeshBatchBase<MyDrawContext> *_currentBatch;
EffectHandle _currentEffect;
2013-05-10 02:18:32 +00:00
};
#endif /* DELEGATE_H */