小编kek*_*coh的帖子

PyQT5 OpenGL 4.1核心配置文件-无效的帧缓冲区操作-Mac OS

这个问题可能与另一个SO问题有关

我正在运行MacOS 10.11.2 El Capitan。希望在我的OpenGL应用程序周围具有丰富的GUI功能,我决定尝试PyQT5创建OpenGL上下文,以便将OpenGL作为QtWidget集成到GUI应用程序中。

QT5为QGlWidget提供了几种API方法,此我简要地总结一下:

  • initializeGL:之前被调用过一次 paintGL
  • paintGL:将内容绘制到活动帧缓冲区的地方

我能够创建小部件并初始化着色器等。但是当涉及到帧缓冲区相关操作时,会glClear出现错误:

File "errorchecker.pyx", line 53, in OpenGL_accelerate.errorchecker._ErrorChecker.glCheckError (src/errorchecker.c:1218)

OpenGL.error.GLError: GLError(
    err = 1286,
    description = 'invalid framebuffer operation',
    baseOperation = glClear,
    cArguments = (GL_COLOR_BUFFER_BIT,)
)
Run Code Online (Sandbox Code Playgroud)

我发现了一个网站,报告相关问题。似乎在调用API方法时没有配置帧缓冲区。我觉得这应该是QT的任务,我没有尝试自己配置窗口帧缓冲区。但是我发现在调用API方法后,神奇地创建了帧缓冲区。因此,我建立了一个小技巧,它将等待paintGL被调用的NSKIP_PAINTGL=3时间。然后,配置我的对象,以便正常的paintGL进程开始工作。这似乎有效。但是有时需要的NSKIP_PAINTGL时间不止一次,因此我sleep在解决方法中加入了一些内容。QT似乎应该在应该创建之后创建帧缓冲区。也许QT是在单独的线程中进行的?该QOpenGLWidget 确认有时可能不会创建帧缓冲区:

返回值帧缓冲区对象句柄;如果尚未初始化,则返回0。

我不喜欢这样的工作环境,因为我担心这里的条件会提高。我在这里也没有太多的控制权(我需要依靠这样的事实,即QT首先经常调用paintGL,这样hack才能起作用)。我目前不熟悉QT框架,所以这是我的问题

如何创建某种循环,该循环在QGLControllerWidget创建时会运行updateGLa覆盖的方法try/catch并在GlError出现时重试?或者,循环可以侦听QOpenGLWidget::defaultFramebufferObject()并等待对象句柄。

当然,我想将这种技巧尽可能优雅地集成到QT应用程序流程中,这很可爱 …

python opengl qt pyqt qt5

5
推荐指数
1
解决办法
1307
查看次数

如何在子类中使用描述符的装饰器

我想知道是否可以在子类中使用描述符的装饰器。

class Descriptor():
    def __get__(self, instance_obj, objtype):
        raise Exception('ouch.')
    def decorate(self, f):
        print('decorate', f)
        return f

class A():
    my_attr = Descriptor()

class B():
    @my_attr.decorate
    def foo(self):
        print('hey, whatsup?')

# --> NameError: name 'my_attr' is not defined
Run Code Online (Sandbox Code Playgroud)

这当然是行不通的,因为my_attr在 的类定义中未定义B

接下来我尝试了:

class B():
    @A.my_attr.decorate
    def foo(self):
        print('hey, whatsup?')

# --> Exception: ouch.
Run Code Online (Sandbox Code Playgroud)

但是,此方法调用描述符__get__方法(其中instance_obj参数为None),因此会触发测试异常。要访问装饰器,可以检查是否instance_obj返回None描述符本身:

def __get__(self, instance_obj, objtype):
    if instance_obj is None:
        return self
    raise Exception('avoid this')
# --> …
Run Code Online (Sandbox Code Playgroud)

python descriptor python-3.x python-descriptors

5
推荐指数
1
解决办法
918
查看次数

flatMap 忽略结果

我想知道是否存在一个函数(在 scala 或猫中)忽略flatMap. 例如

Some("ignore this").ignoreArgumentFlatMap(Some("result"))
Run Code Online (Sandbox Code Playgroud)

这将与

Some("ignore this").flatMap(_ => Some("result"))
Run Code Online (Sandbox Code Playgroud)

monads scala scala-cats

5
推荐指数
1
解决办法
253
查看次数

将 numpy unit8 原始数组直接转换为 float32

在我的情况,我收到了numpy.ndarray作为unit8大小4 * n代表的原始二进制数据float32的实体。所以4个项目一起代表一个float32。为了获取float32数字,我目前将uint8原始数据转换为二进制字符串,然后从该字符串中读取float32值。

np.fromstring(raw_unit8_data.tostring(), dtype='<f4')
Run Code Online (Sandbox Code Playgroud)

是否有可能直接进行这种转换而无需uint8先将数据转换为字符串?

python arrays numpy

4
推荐指数
1
解决办法
6680
查看次数

类型的约束多态性

我尝试定义受约束的多态值列表,例如

myList = ["foo", 5] :: [Show a => a]
Run Code Online (Sandbox Code Playgroud)

这会产生以下错误(GHCi,版本 8.6.5)

GHC 尚不支持不可预测的多态性

无论如何,是否可以指定一种类型,例如,表单的函数f :: Show a => [a] -> [String]可以使用上述受约束的值?

换句话说,有没有办法让编译器验证下面的代码?

(++ "fork") . show <$> ["foo", 5]
Run Code Online (Sandbox Code Playgroud)

我目前尝试Show通过定义值和预期结果的数据集来测试GADT的类型类实例[(value, "expectedResult")]。但是,由于 GADT 的构造函数指定了值类型,因此不可能天真地做到这一点。

haskell

4
推荐指数
1
解决办法
76
查看次数

可选类型化可变参数

PHP 从 5.6 版本开始就具有可变参数解包功能

function doSomething(User ...$users) {
     return count($users);
}
$userOrNoUserList = [$user1, null, $user2];
doSomething(...$userOrNoUserList); // wanted: 3
Run Code Online (Sandbox Code Playgroud)

这会引发以下错误:

可捕获的致命错误:传递给 doSomething() 的参数 2 必须是 user 的实例,给定为 null

但我想保留里面的列表结构doSomething();我不想null在调用之前过滤值。是否也可以允许null值?

php

3
推荐指数
1
解决办法
695
查看次数

ReaderT 设计模式:参数化环境

我基于ReaderT 设计模式构建了一个项目。我选择使用简单的处理程序注入作为函数参数,而不是使用类型类方法进行依赖项注入。这部分工作得很好,因为我们能够静态构建依赖树并动态定义环境。

环境可能包含配置以及日志记录效果:: String -> IO ()、时间效果:: IO UTCDate等。考虑以下简化示例

import Control.Monad.Reader (runReaderT, liftIO, reader, MonadReader, MonadIO)

data SomeEnv 
  = SomeEnv
  { a :: Int
  , logger :: String -> IO ()
  }

class HasLogger a where 
  getLogger :: a -> (String -> IO())

instance HasLogger SomeEnv where 
  getLogger = logger 

myFun :: (MonadIO m, MonadReader e m, HasLogger e) => Int -> m Int
myFun x = do
  logger <- reader getLogger
  liftIO $ …
Run Code Online (Sandbox Code Playgroud)

haskell dependency-injection

3
推荐指数
1
解决办法
1295
查看次数

将类型级别的可选自然数(Maybe Nat)与一个值相关联

该函数natVal :: forall n proxy. KnownNat n => proxy n -> Integer将类型级别 natural 与Integer值相关联。使用DataKinds,TypeApplications语言扩展可以做

{-# LANGUAGE DataKinds #-}
{-# LANGUAGE TypeApplications #-}

module Derp where

import           Data.Proxy                     ( Proxy(..) )
import           GHC.TypeLits                   ( natVal )

foo :: Integer
foo = natVal (Proxy @1337)
Run Code Online (Sandbox Code Playgroud)

如何将 a'Maybe Nat与一个值相关联?例如一个Maybe Integer

foo2 :: Maybe Integer
foo2 = maybeNatVal (Proxy @(Just 1337))
Run Code Online (Sandbox Code Playgroud)

haskell type-level-computation

2
推荐指数
1
解决办法
150
查看次数

使部分函数完整

是否有完成部分功能的标准方法PartialFunction[A, B]?像这样的东西:

completePartialFunction(pf: PartialFunction[A, B], z: B): A => B
Run Code Online (Sandbox Code Playgroud)

或者

completePartialFunction2(pf: PartialFunction[A, B], f: A => B): A => B
Run Code Online (Sandbox Code Playgroud)

functional-programming scala

2
推荐指数
2
解决办法
106
查看次数