Skip to content

Commit

Permalink
Merged Windows port into garch.
Browse files Browse the repository at this point in the history
(Internal change: 1725353)
  • Loading branch information
pixar-oss committed Mar 17, 2017
1 parent de35592 commit 73ce992
Show file tree
Hide file tree
Showing 10 changed files with 296 additions and 34 deletions.
1 change: 1 addition & 0 deletions pxr/imaging/lib/garch/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ pxr_shared_library(garch
glPlatformDebugContext

PUBLIC_HEADERS
api.h
gl.h
glPlatformContext.h
${GARCH_GLPLATFORMCONTEXT}.h
Expand Down
47 changes: 47 additions & 0 deletions pxr/imaging/lib/garch/api.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
//
// Copyright 2017 Pixar
//
// Licensed under the Apache License, Version 2.0 (the "Apache License")
// with the following modification; you may not use this file except in
// compliance with the Apache License and the following modification to it:
// Section 6. Trademarks. is deleted and replaced with:
//
// 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 to comply with Section 4(c) of
// the License and to reproduce the content of the NOTICE file.
//
// You may obtain a copy of the Apache License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the Apache License with the above modification is
// distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
// KIND, either express or implied. See the Apache License for the specific
// language governing permissions and limitations under the Apache License.
//
#ifndef GARCH_API_H
#define GARCH_API_H

#include "pxr/base/arch/export.h"

#if defined(GARCH_STATIC)
# define GARCH_API
# define GARCH_API_TEMPLATE_CLASS(...)
# define GARCH_API_TEMPLATE_STRUCT(...)
# define GARCH_LOCAL
#else
# if defined(GARCH_EXPORTS)
# define GARCH_API ARCH_EXPORT
# define GARCH_API_TEMPLATE_CLASS(...) ARCH_EXPORT_TEMPLATE(class, __VA_ARGS__)
# define GARCH_API_TEMPLATE_STRUCT(...) ARCH_EXPORT_TEMPLATE(struct, __VA_ARGS__)
# else
# define GARCH_API ARCH_IMPORT
# define GARCH_API_TEMPLATE_CLASS(...) ARCH_IMPORT_TEMPLATE(class, __VA_ARGS__)
# define GARCH_API_TEMPLATE_STRUCT(...) ARCH_IMPORT_TEMPLATE(struct, __VA_ARGS__)
# endif
# define GARCH_LOCAL ARCH_HIDDEN
#endif

#endif
2 changes: 1 addition & 1 deletion pxr/imaging/lib/garch/glDebugWindow.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@
#elif defined ARCH_OS_DARWIN
#include "pxr/imaging/garch/glPlatformDebugWindowDarwin.h"
#elif defined ARCH_OS_WINDOWS
#include "pxr/imaging/garch/glPlatformDebugWindowWin.h"
#include "pxr/imaging/garch/glPlatformDebugWindowWindows.h"
#endif

PXR_NAMESPACE_OPEN_SCOPE
Expand Down
6 changes: 3 additions & 3 deletions pxr/imaging/lib/garch/glPlatformContext.h
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
/// \file garch/glPlatformContext.h

#include "pxr/pxr.h"
#include "pxr/imaging/garch/api.h"
#include "pxr/base/arch/defines.h"
#include <cstddef>

Expand All @@ -40,8 +41,7 @@

#elif defined ARCH_OS_WINDOWS

// XXX: TODO
// #include "pxr/imaging/garch/glPlatformContextWindows.h"
#include "pxr/imaging/garch/glPlatformContextWindows.h"

#else

Expand All @@ -51,7 +51,7 @@

PXR_NAMESPACE_OPEN_SCOPE

GarchGLPlatformContextState GarchGetNullGLPlatformContextState();
GARCH_API GarchGLPlatformContextState GarchGetNullGLPlatformContextState();

inline
size_t
Expand Down
92 changes: 92 additions & 0 deletions pxr/imaging/lib/garch/glPlatformContextWindows.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
//
// Copyright 2017 Pixar
//
// Licensed under the Apache License, Version 2.0 (the "Apache License")
// with the following modification; you may not use this file except in
// compliance with the Apache License and the following modification to it:
// Section 6. Trademarks. is deleted and replaced with:
//
// 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 to comply with Section 4(c) of
// the License and to reproduce the content of the NOTICE file.
//
// You may obtain a copy of the Apache License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the Apache License with the above modification is
// distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
// KIND, either express or implied. See the Apache License for the specific
// language governing permissions and limitations under the Apache License.
//
#include "pxr/imaging/garch/glPlatformContextWindows.h"

#include <boost/functional/hash.hpp>
#include <Windows.h>

class GarchWGLContextState::_Detail {
public:
_Detail(HDC hdc, HGLRC hglrc) : hdc(hdc), hglrc(hglrc) { }

HDC hdc;
HGLRC hglrc;
};

//
// GarchWGLContextState
//

GarchWGLContextState::GarchWGLContextState() :
_detail(std::make_shared<_Detail>(wglGetCurrentDC(),wglGetCurrentContext()))
{
// Do nothing
}

GarchWGLContextState::GarchWGLContextState(NullState) :
_detail(std::make_shared<_Detail>(HDC(0), HGLRC(0)))
{
// Do nothing
}

bool
GarchWGLContextState::operator==(const GarchWGLContextState& rhs) const
{
return _detail->hdc == rhs._detail->hdc &&
_detail->hglrc == rhs._detail->hglrc;
}

size_t
GarchWGLContextState::GetHash() const
{
size_t result = 0;
boost::hash_combine(result, _detail->hdc);
boost::hash_combine(result, _detail->hglrc);
return result;
}

bool
GarchWGLContextState::IsValid() const
{
return _detail->hdc && _detail->hglrc;
}

void
GarchWGLContextState::MakeCurrent()
{
wglMakeCurrent(_detail->hdc, _detail->hglrc);
}

void
GarchWGLContextState::DoneCurrent()
{
wglMakeCurrent(NULL, NULL);
}

GARCH_API
GarchGLPlatformContextState
GarchGetNullGLPlatformContextState()
{
return GarchWGLContextState(GarchWGLContextState::NullState::nullstate);
}
77 changes: 77 additions & 0 deletions pxr/imaging/lib/garch/glPlatformContextWindows.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
//
// Copyright 2017 Pixar
//
// Licensed under the Apache License, Version 2.0 (the "Apache License")
// with the following modification; you may not use this file except in
// compliance with the Apache License and the following modification to it:
// Section 6. Trademarks. is deleted and replaced with:
//
// 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 to comply with Section 4(c) of
// the License and to reproduce the content of the NOTICE file.
//
// You may obtain a copy of the Apache License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the Apache License with the above modification is
// distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
// KIND, either express or implied. See the Apache License for the specific
// language governing permissions and limitations under the Apache License.
//
#ifndef GARCH_GLPLATFORMCONTEXT_WINDOWS_H
#define GARCH_GLPLATFORMCONTEXT_WINDOWS_H

#include "pxr/pxr.h"
#include "pxr/imaging/garch/api.h"
#include <memory>

PXR_NAMESPACE_OPEN_SCOPE


class GarchWGLContextState {
public:
/// Construct with the current state.
GARCH_API
GarchWGLContextState();

enum class NullState { nullstate };

/// Construct with the null state.
GARCH_API
GarchWGLContextState(NullState);

/// Compare for equality.
GARCH_API
bool operator==(const GarchWGLContextState& rhs) const;

/// Returns a hash value for the state.
GARCH_API
size_t GetHash() const;

/// Returns \c true if the context state is valid.
GARCH_API
bool IsValid() const;

/// Make the context current.
GARCH_API
void MakeCurrent();

/// Make no context current.
GARCH_API
static void DoneCurrent();

private:
class _Detail;
std::shared_ptr<_Detail> _detail;
};

// Hide the platform specific type name behind a common name.
typedef GarchWGLContextState GarchGLPlatformContextState;


PXR_NAMESPACE_CLOSE_SCOPE

#endif // GARCH_GLPLATFORMCONTEXT_WINDOWS_H
8 changes: 8 additions & 0 deletions pxr/imaging/lib/garch/glPlatformDebugContext.h
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
#define GARCH_GLPLATFORM_DEBUG_CONTEXT_H

#include "pxr/pxr.h"
#include "pxr/imaging/garch/api.h"
#include "pxr/base/tf/declarePtrs.h"
#include "pxr/base/tf/weakBase.h"

Expand All @@ -43,16 +44,23 @@ TF_DECLARE_WEAK_PTRS(GarchGLPlatformDebugContext);
///
class GarchGLPlatformDebugContext : public TfWeakBase {
public:
GARCH_API
GarchGLPlatformDebugContext(int majorVersion,
int minorVersion,
bool coreProfile,
bool directRenderering);
virtual ~GarchGLPlatformDebugContext();

GARCH_API
static bool IsEnabledDebugOutput();

GARCH_API
static bool IsEnabledCoreProfile();

GARCH_API
void makeCurrent();

GARCH_API
void *chooseMacVisual();

public:
Expand Down
Loading

0 comments on commit 73ce992

Please sign in to comment.