Hello. I've been struggling with displaying an OpenGL drawing area inside of a notebook tab in GTK. What I need to do is to have two type of tab contents in my application: One is a text editor, using gtksourceview, which is used to write the input to a calculation procedure. When invoked, this procedure should do the calculation and then open a new notebook tab, which contains an OpenGL drawing area, displaying the results.
So far I just tried to get GL running by adapting the hello world example from the wiki. The thing is that it works fine when I put the drawing area into the main window when creating the main window in the first place, but it does not work properly when putting it in a notebook tab while the application is already running.
This is the basic outline of how I create my main window:mainWindow :: IO () mainWindow = initGUI >> GtkGL.initGL >> goWin >> mainGUI goWin :: IO () goWin = do gui <- buildGUI connectGUI gui widgetShowAll $ window gui
Where buildGUI creates all the widgets that I need (returning them inside of a record) and connectGUI assigns signal handling to the individual widgets. No GL drawing area has been created yet. When pressing "calculate" in the menu, the calculations are done and a new ResultView is built as follows, which is then displayed in a new tab in the notebook:buildResultView :: Either Result FilePath -> IO ResultView buildResultView d = do hbox <- hBoxNew False 0 glconfig <- GtkGL.glConfigNew [ GtkGL.GLModeRGBA , GtkGL.GLModeDepth , GtkGL.GLModeDouble ] gl <- GtkGL.glDrawingAreaNew glconfig Gtk.onRealize gl $ GtkGL.withGLDrawingArea gl $ \_ -> do clearColor $= (Color4 0.0 0.0 0.0 0.0) matrixMode $= Projection loadIdentity ortho 0.0 1.0 0.0 1.0 (-1.0) 1.0 depthFunc $= Just Less drawBuffer $= BackBuffers -- Set the repaint handler Gtk.onExpose gl $ \_ -> do GtkGL.withGLDrawingArea gl $ \glwindow -> do GL.clear [GL.DepthBuffer, GL.ColorBuffer] display GtkGL.glDrawableSwapBuffers glwindow return True boxPackStart hbox gl PackGrow 0 return $ ResultView hbox display = do loadIdentity color (Color3 1 1 0 :: Color3 GLfloat) -- Instead of glBegin ... glEnd there is renderPrimitive. renderPrimitive Polygon $ do vertex (Vertex3 1 0 0.0 :: Vertex3 GLfloat) vertex (Vertex3 1 1 0.0 :: Vertex3 GLfloat) vertex (Vertex3 0 1 0.0 :: Vertex3 GLfloat) vertex (Vertex3 0 0 0.0 :: Vertex3 GLfloat)
This is called by the following code, which builds the actual notebook tab:newResultTab :: GUI -> Either Result FilePath -> IO () newResultTab gui d = do -- define tab label let lbl = either (const "<result>") takeFileName d fp = either (const Nothing) Just d -- build a new tab and resultview r <- buildResultView d tab <- buildNotebookTab (Right r) fp (Just lbl) -- wire close button onToolButtonClicked (ntCloseButton tab) $ do index <- notebookPageNum (nbook gui) (resultBox r) index ?>= \i -> notebookRemovePage (nbook gui) i -- add page widgetShowAll (resultBox r) menuLabel <- labelNew $ Just lbl index <- notebookAppendPageMenu (nbook gui) (resultBox r) (ntBox tab) menuLabel notebookSetTabReorderable (nbook gui) (resultBox r) True -- set as current and register modifyIORef (tabs gui) ((index,tab):) writeIORef (current gui) $ Just (index,tab) return ()
So my question is: The OpenGL code does clearly draw a yellow box, and it does actually do this when putting the drawing area into the main window at startup instead of the notebook. However, when I run it like above, all I get is a black window, and nothing is displayed in it. Does anyone have an idea how to fix this?
EDIT: I've got a minimal example of the problem which I've uploaded here.submitted by tsahyt
[link] [4 comments]
Let's assume for the sake of argument some future time where computer algorithms are 'smart' enough to write their own code within a native source language or framework, then refactor and optimize that code, and basically add to their own programming to meet established goals or targets, which can themselves be modified and/or evolve with metaprogramming.
If this mythical machine existed and wrote code to modify its own programming, without concern at all for human readability or comprehension but instead purely for its own efficient design and function, then what language would it likely use in the most optimal scenario born out of current present day technologies?
- machine language
- assembly language
- Haskell or ML variant
- Dynamic scripting language (Python, etc)
- Low level alternatives to C (D, Rust, Nimrod, etc)
[link] [7 comments]
I know this question may seem somewhat confrontational, but it's actually a thoughtful open letter from someone who really enjoys Haskell programming but whose day job unfortunately has involved lots of C++, Java, and Fortran programming throughout my career ( I work in games industry currently ).
Why is there is so much work on building more perfect languages and abstractions when the industry adoption already lags 25-30 years behind what you fellows are already working with?
I don't want to appear like I'm against progress in languages. I'm all for higher level and better abstractions and heated debates about extensional versus intensional type theory. But Haskell ( and FP on a larger scale ) seems to be of the "obelisk" model of design, seeing how high and far we can go, instead of the "pyramid" style of building out abstractions that can cover a larger area of use-cases.
For instance, there's a lot of bad C++ out there that is a giant imperative mess but covers enough of the industry use-cases, that network-effects tend to negate the use of anything better. I don't see anything replacing C++ for games programming on the order of the next 25 years and that scares me.
At least to me it appears the gap between the average industry programmer and the working Haskell developer is not shrinking but becoming insurmountably large. Even reading through Learn You a Haskell doesn't come close to preparing someone to read through half the libraries on Hackage. There's hundreds of languages extensions, types, and advanced patterns that seem to be ubiquitous but are not explained anywhere for the layman.
So my question to you fine Haskellers is how do you see Haskell getting more industry adoption and what can be done by folks like myself to help get there?submitted by gamedevmike
[link] [112 comments]
For the RapidWeaver users out there, I’ve updated my antique Markup plugin to work with RapidWeaver 5 (slow clap). It also now lives on GitHub, like all the other cool open-source projects published after about 1970. (BitBucket is so 1969.)
As an aside, ohmigosh, there still isn’t anything out there that’s as good as RapidWeaver for building websites. I wanted to redo my site, and looked into a bunch of RapidWeaver alternatives, especially Web apps. Tumblr, Wordpress, Blogger and all that are great for just blogs, but useless for building anything more than a blog. Online site-builders like Squarespace, Weebly, and Virb are either way too dumbed down, too complex, have the most boring themes, or more likely, are all of the above. Despite RapidWeaver still being compiled for ppc and i386 only (it’s not a 64-bit app yet), and using the Objective-C 1.0 runtime (my Markup plugin uses +[NSObject poseAsClass:]!), it is still the best thing going for building sites. Amazing.
Anyway, Markup plugin, go get it.
I've heard the idea of installing shared libraries with cabal and ditching the dependencies. This to me sounds better than cabal sandboxes because it allows you to reuse libraries without needing to reinstall them, and hopefully without needing to redo your entire cabal when you go for an upgrade to your libs. Unfortunately this wouldn't (afaik) improve the amount of time it takes to install these libs.
However if it were possible to install the dependencies as well, compile these shared libraries with the installed dependencies (if the version matches) and then have a new independent library, than I think our package management infrastructure would be solved. If the installed dependency is a version mismatch, we could install this library with a temporary instance of the desired dependency, and then toss jt.
Is this possible ? Do you think this is a good idea/would help?
Also while I'm on the podium might I add that it feels like overkill for cabal to be managing packages, building and sand boxing all on it's own? I think it should at least be split into separate commandssubmitted by fruitbooploops
[link] [33 comments]
I am an avid Haskeller and will be in Santiago, Chile for around 6 months starting August. I was wondering if there are any Chilean Haskell groups or meetups that I can join.submitted by haskman
[link] [4 comments]
At this year's Oregon Programming Language Summer School Stephanie Weirich gave a a series of lectures walking through the development of a simple dependently typed language in Haskell.
The videos are available as .mp4 files at:
and the github repo for the source code is available at:mn-haskell-guy
[link] [10 comments]