105b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger/*
205b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger    Copyright 2010 Google Inc.
305b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger
405b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger    Licensed under the Apache License, Version 2.0 (the "License");
505b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger    you may not use this file except in compliance with the License.
605b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger    You may obtain a copy of the License at
705b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger
805b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger         http://www.apache.org/licenses/LICENSE-2.0
905b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger
1005b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger    Unless required by applicable law or agreed to in writing, software
1105b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger    distributed under the License is distributed on an "AS IS" BASIS,
1205b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1305b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger    See the License for the specific language governing permissions and
1405b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger    limitations under the License.
1505b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger */
1605b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger
1705b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger
1805b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger#ifndef SkGrTexturePixelRef_DEFINED
1905b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger#define SkGrTexturePixelRef_DEFINED
2005b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger
2105b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger#include "SkPixelRef.h"
2205b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger#include "GrGpu.h"
2305b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger
2405b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenbergerclass SkGrTexturePixelRef : public SkPixelRef {
2505b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenbergerpublic:
2605b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger            SkGrTexturePixelRef(GrTexture*);
2705b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger    virtual ~SkGrTexturePixelRef();
2805b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger
2905b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger    // override from SkPixelRef
3005b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger    virtual SkGpuTexture* getTexture() { return (SkGpuTexture*)fTexture; }
3105b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger
3205b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenbergerprotected:
3305b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger    // override from SkPixelRef
3405b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger    virtual void* onLockPixels(SkColorTable** ptr) {
3505b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger        if (ptr) {
3605b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger            *ptr = NULL;
3705b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger        }
3805b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger        return NULL;
3905b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger    }
4005b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger
4105b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger    // override from SkPixelRef
4205b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger    virtual void onUnlockPixels() {}
4387b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger    virtual bool onReadPixels(SkBitmap* dst, const SkIRect* subset);
4405b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger
4505b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenbergerprivate:
4605b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger    GrTexture*  fTexture;
4705b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger    typedef SkPixelRef INHERITED;
4805b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger};
4905b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger
5087b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenbergerclass SkGrRenderTargetPixelRef : public SkPixelRef {
5187b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenbergerpublic:
5287b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger            SkGrRenderTargetPixelRef(GrRenderTarget* rt);
5387b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger    virtual ~SkGrRenderTargetPixelRef();
5487b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger
5587b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger    // override from SkPixelRef
5687b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger    virtual SkGpuTexture* getTexture();
5787b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger
5887b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenbergerprotected:
5987b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger    // override from SkPixelRef
6087b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger    virtual void* onLockPixels(SkColorTable** ptr) {
6187b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger        if (ptr) {
6287b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger            *ptr = NULL;
6387b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger        }
6487b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger        return NULL;
6587b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger    }
6687b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger
6787b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger    // override from SkPixelRef
6887b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger    virtual void onUnlockPixels() {}
6987b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger    virtual bool onReadPixels(SkBitmap* dst, const SkIRect* subset);
7087b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger
7187b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenbergerprivate:
7287b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger    GrRenderTarget*  fRenderTarget;
7387b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger    typedef SkPixelRef INHERITED;
7487b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger};
7587b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger
7605b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger#endif
7705b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger
78