a93a14a998
This was created by looking at warnings produced by clang's -Wzero-as-null-pointer-constant. This updates most issues in Skia code. However, there are places where GL and Vulkan want pointer values which are explicitly 0, external headers which use NULL directly, and possibly more uses in un-compiled sources (for other platforms). Change-Id: Id22fbac04d5c53497a53d734f0896b4f06fe8345 Reviewed-on: https://skia-review.googlesource.com/39521 Reviewed-by: Mike Reed <reed@google.com> Commit-Queue: Ben Wagner <bungeman@google.com>
111 lines
3.8 KiB
C++
111 lines
3.8 KiB
C++
|
|
/*
|
|
* 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 GLTestContext_DEFINED
|
|
#define GLTestContext_DEFINED
|
|
|
|
#include "TestContext.h"
|
|
#include "gl/GrGLInterface.h"
|
|
|
|
namespace sk_gpu_test {
|
|
/**
|
|
* An offscreen OpenGL context. Provides a GrGLInterface struct of function pointers for the context
|
|
* This class is intended for Skia's internal testing needs and not for general use.
|
|
*/
|
|
class GLTestContext : public TestContext {
|
|
public:
|
|
~GLTestContext() override;
|
|
|
|
virtual GrBackend backend() override { return kOpenGL_GrBackend; }
|
|
virtual GrBackendContext backendContext() override {
|
|
return reinterpret_cast<GrBackendContext>(fGL.get());
|
|
}
|
|
|
|
bool isValid() const { return SkToBool(this->gl()); }
|
|
|
|
const GrGLInterface *gl() const { return fGL.get(); }
|
|
|
|
/** Used for testing EGLImage integration. Take a GL_TEXTURE_2D and wraps it in an EGL Image */
|
|
virtual GrEGLImage texture2DToEGLImage(GrGLuint /*texID*/) const { return nullptr; }
|
|
|
|
virtual void destroyEGLImage(GrEGLImage) const { }
|
|
|
|
/** Used for testing GL_TEXTURE_RECTANGLE integration. */
|
|
GrGLint createTextureRectangle(int width, int height, GrGLenum internalFormat,
|
|
GrGLenum externalFormat, GrGLenum externalType,
|
|
GrGLvoid *data);
|
|
|
|
/**
|
|
* Used for testing EGLImage integration. Takes a EGLImage and wraps it in a
|
|
* GL_TEXTURE_EXTERNAL_OES.
|
|
*/
|
|
virtual GrGLuint eglImageToExternalTexture(GrEGLImage) const { return 0; }
|
|
|
|
void testAbandon() override;
|
|
|
|
/** Ensures all work is submitted to the GPU for execution. */
|
|
void submit() override;
|
|
|
|
/** Wait until all GPU work is finished. */
|
|
void finish() override;
|
|
|
|
/**
|
|
* Creates a new GL context of the same type and makes the returned context current
|
|
* (if not null).
|
|
*/
|
|
virtual std::unique_ptr<GLTestContext> makeNew() const { return nullptr; }
|
|
|
|
template<typename Ret, typename... Args>
|
|
void getGLProcAddress(Ret(GR_GL_FUNCTION_TYPE** out)(Args...),
|
|
const char* name, const char* ext = nullptr) const {
|
|
using Proc = Ret(GR_GL_FUNCTION_TYPE*)(Args...);
|
|
if (!SkStrStartsWith(name, "gl")) {
|
|
SK_ABORT("getGLProcAddress: proc name must have 'gl' prefix");
|
|
*out = nullptr;
|
|
} else if (ext) {
|
|
SkString fullname(name);
|
|
fullname.append(ext);
|
|
*out = reinterpret_cast<Proc>(this->onPlatformGetProcAddress(fullname.c_str()));
|
|
} else {
|
|
*out = reinterpret_cast<Proc>(this->onPlatformGetProcAddress(name));
|
|
}
|
|
}
|
|
|
|
sk_sp<GrContext> makeGrContext(const GrContextOptions& options) override;
|
|
|
|
protected:
|
|
GLTestContext();
|
|
|
|
/*
|
|
* Methods that sublcasses must call from their constructors and destructors.
|
|
*/
|
|
void init(const GrGLInterface *, std::unique_ptr<FenceSync> = nullptr);
|
|
|
|
void teardown() override;
|
|
|
|
virtual GrGLFuncPtr onPlatformGetProcAddress(const char *) const = 0;
|
|
|
|
private:
|
|
/** Subclass provides the gl interface object if construction was
|
|
* successful. */
|
|
sk_sp<const GrGLInterface> fGL;
|
|
|
|
typedef TestContext INHERITED;
|
|
};
|
|
|
|
/**
|
|
* Creates platform-dependent GL context object. The shareContext parameter is in an optional
|
|
* context with which to share display lists. This should be a pointer to an GLTestContext created
|
|
* with SkCreatePlatformGLTestContext. NULL indicates that no sharing is to take place. Returns a
|
|
* valid gl context object or NULL if such can not be created.
|
|
*/
|
|
GLTestContext* CreatePlatformGLTestContext(GrGLStandard forcedGpuAPI,
|
|
GLTestContext *shareContext = nullptr);
|
|
|
|
} // namespace sk_gpu_test
|
|
#endif
|